5

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

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

Couldn't find User with id=login

它尝试将登录用作 ID 参数,而不是将其用作操作。

路由.rb

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

我认为我在路线上做错了,所以如果有人可以帮助我,那就太好了。

谢谢

4

1 回答 1

9

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

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

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

Rails 路由按照它们指定的顺序匹配,所以如果你有一个resources :photos上面的 a ,则该行get 'photos/poll'show操作路由resources将在该行之前匹配get。要解决此问题,请将行移到get上方resources以便首先匹配。

因此,要么在之前 定义您的自定义路线resources :users

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

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

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

查看从命令行运行的现有路线(及其顺序)rake routes

于 2012-07-06T08:33:16.483 回答