Rails路线寻找表演行动

时间:2012-04-15 10:00:12

标签: ruby-on-rails routes conflict

我对rails非常陌生,基本上我想制作一个用户注册表。

我目前正在使用rails 3.2.3

基本上我想在用户的基本REST路径之上创建基本路由,例如用户/注册。

这是我的routes.rb

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

这是我的佣金路线:

     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之上,因此在显示之前它应首先与register匹配。

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

没有路线匹配{:action =>“show”,:controller =>“user”}

有人可以帮我吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

resources :users do
  collection do
    get :register
  end
end

答案 1 :(得分:0)

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

resources :users, path: 'user' do

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

resources :users do

您的注册路径为/users/register