使用restful操作在rails控制器中自定义操作?

我在使用scaffold生成的控制器中创建自己的动作时遇到了一些麻烦。

我理解一切都映射到了宁静的动作,但是我正在构建一个用户控制器,用户可以登录/注销等,但是当我创建动作并在routes.rb中声明它时,当我访问用户/登录时出现此错误

Couldn't find User with id=login 

它尝试使用login作为ID参数,而不是将其用作操作。

的routes.rb

 match 'users/login' => 'users#login' 

我觉得我在路线上做错了所以如果有人能帮助我那会很棒。

谢谢

我假设您的routes.rb看起来像这样:

 resources :users match 'users/login' => 'users#login' 

问题是Rails使用匹配的第一个路由。 从文档 :

Rails路由按照指定的顺序进行匹配,因此如果您有resources :photos get 'photos/poll'之上的get 'photos/poll'resources行的show action路线将在get行之前匹配。 要解决此问题,请将get行移到resources上方 ,以便首先匹配。

因此,要么 resources :users 之前定义自定义路由resources :users

 match 'users/login' => 'users#login' resources :users 

…或使用此语法添加更多RESTful操作 :

 resources :users do collection do match 'login' end end 

要查看现有路由(及其顺序),请从命令行运行rake routes