Ruby on rails rails控制器中具有restful操作的自定义操作?
我在使用scaffold生成的控制器中创建自己的操作时遇到了一些问题 我知道一切都映射到restful操作,但我正在构建一个用户控制器,用户可以在其中登录/注销,等等,但是当我创建了操作并在routes.rb中声明它时,我在访问用户/登录时会出现此错误Ruby on rails rails控制器中具有restful操作的自定义操作?,ruby-on-rails,routes,Ruby On Rails,Routes,我在使用scaffold生成的控制器中创建自己的操作时遇到了一些问题 我知道一切都映射到restful操作,但我正在构建一个用户控制器,用户可以在其中登录/注销,等等,但是当我创建了操作并在routes.rb中声明它时,我在访问用户/登录时会出现此错误 Couldn't find User with id=login 它尝试将login用作ID参数,而不是将其用作操作 Routes.rb match 'users/login' => 'users#login' 我想我的路线有问题,如果
Couldn't find User with id=login
它尝试将login用作ID参数,而不是将其用作操作
Routes.rb
match 'users/login' => 'users#login'
我想我的路线有问题,如果有人能帮我,那就太好了
谢谢我猜你的
路线。rb
看起来像这样:
resources :users
match 'users/login' => 'users#login'
问题是Rails使用匹配的第一条路由。从:
Rails路由按照指定的顺序进行匹配,因此如果在get'photos/poll'
上有一个resources:photos
,则show
操作的resources
行的路由将在get
行之前进行匹配。要解决此问题,请将get
行移动到resources
行上方,以便首先匹配该行
因此,在参考资料:用户之前定义您的自定义路由:
match 'users/login' => 'users#login'
resources :users
…或将此语法用于:
查看从命令行运行的现有路由(及其顺序)。我认为您的路由正在调用用户#show而不是用户#login。因此,您必须将“用户/登录名”更改为其他url。
resources :users do
collection do
match 'login'
end
end