【问题标题】:Custom actions in rails controller with restful actions?Rails 控制器中的自定义操作与宁静的操作?
【发布时间】:2012-07-06 05:40:33
【问题描述】:

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

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

Couldn't find User with id=login

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

Routes.rb

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

我认为我的路线有问题,所以如果有人可以帮助我,那就太好了。

谢谢

【问题讨论】:

  • 我认为您的路线正在调用 users#show 而不是 users#login。因此,您必须将“用户/登录”更改为其他网址。

标签: ruby-on-rails routes


【解决方案1】:

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

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

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

Rails 路由按照它们指定的顺序进行匹配,因此如果您在get 'photos/poll' 上方有一个resources :photos,则resources 行的show 操作路由将在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

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2010-09-25
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多