【问题标题】:Rails routes looking for show action寻找表演动作的 Rails 路线
【发布时间】:2012-04-27 00:15:53
【问题描述】:

我对 Rails 很陌生,基本上我想制作一个用户注册表。

我目前正在使用 rails 3.2.3

基本上我想在用户的基本 REST 路由之上创建用户/注册等基本路由。

这是我的路线.rb

resources :user do
  collection do
    get 'register'
  end
end

这是我的 rake 路线:

     register_user_index GET    /user/register(.:format)   user#register
     user_index GET    /user(.:format)            user#index
                POST   /user(.:format)            user#create
       new_user GET    /user/new(.:format)        user#new
      edit_user GET    /user/:id/edit(.:format)   user#edit
           user GET    /user/:id(.:format)        user#show
                PUT    /user/:id(.:format)        user#update
                DELETE /user/:id(.:format)        user#destroy

据我了解,由于注册用户在show的顶部,所以在显示之前应该先与注册匹配。

但是,当我尝试执行 localhost:3000/user/register 时,它给了我这个错误:

没有路由匹配 {:action=>"show", :controller=>"user"}

有人可以帮我吗?

谢谢!!

【问题讨论】:

  • 您有 user#register 的视图吗?如果可以,可以发一下内容吗?
  • 你确定没有错别字吗?即使它错过了register 路线,为什么它会说你没有show 路线?它就在那里!其他路线有问题吗?

标签: ruby-on-rails routes conflict


【解决方案1】:

您是否拼错了资源?它通常是复数形式,users。但这不是重点——这只是一个惯例。关键是您可能创建了一个名为UsersController 的控制器,并且该控制器不遵循您的资源名称。检查它,或将其命名为UserController。但我强烈建议您不要这样做 - 如果您需要 /user 路径,只需将选项 :path 与您的资源一起使用即可:

resources :users, path: 'user' do

同样,如果还不算太晚,请使用:

resources :users do

您的注册路径将是/users/register

【讨论】:

  • 谢谢!有效!!我认为这是约定俗成的事情。
【解决方案2】:

(我会将此作为注释,但我需要代码示例的标记。)

我使用 Rails 3.1.4 尝试了您的路线,它的工作方式与您预期的一样。

我注意到您使用的是字符串而不是符号。更标准的方式是:

resources :users do
  collection do
    get :register
  end
end

【讨论】:

  • 我也用符号改变了。不知道有没有区别。
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2018-05-06
  • 2011-02-01
  • 2021-06-19
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多