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

时间:2012-07-06 05:40:33

标签: ruby-on-rails routes

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

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

Couldn't find User with id=login

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

的routes.rb

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

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

由于

1 个答案:

答案 0 :(得分:9)

我认为你的routes.rb看起来像这样:

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

问题是Rails使用匹配的第一个路由。来自documentation

  

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

因此,在 resources :users之前定义自定义路线

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

...或者对adding more RESTful actions使用此语法:

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

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