2015-07-19 99 views
0

我得到这个错误:Couldn't find User with 'id'=sign_up当我试图去localhost:3000/users/sign_up in我的URL浏览器。Ruby on Rails 4:设计用户控制器,找不到用户'id'= sign_up

我有生成的单独的用户控制器...

我这样做:

rails g devise:controllers users 
rails g controller Users show 

我没有碰,是由色器件所产生的控制器。

在我所创建的普通用户控制器,我有这样的:

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 
end 

在我的路线:

devise_scope :user do 
    get 'users/:id' => 'users#show', as: :user 
end 
devise_for :users 

rake routes看起来是这样的:

new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
       user GET /users/:id(.:format)   users#show 

它使感觉为什么我得到一个错误,因为:id是我的URL中的sign_up,我只是没有得到我应该做的事情来修复 这个。

当然,它会永远给我任何错误后本地主机:3000 /用户/因为在用户控制器我的表演方法的id

+1

改变你的路线的顺序让'devise_for:users'在devise_scope之上,然后尝试 – Deep

+0

@Deep没有工作。我不认为这个顺序很重要? – hellomello

+0

当我们有类似的路线时它很重要。 – Deep

回答

1

你有一个单独的users_controller它没有按” t属于devise因此devise_scope在那里没用。如果您需要使用任何设计控制器操作,则devise_scope非常有用。因此,只要你的路线如下:

devise_for :users 
get 'users/:id' => 'users#show', as: :user 

当我们有类似的路线时,路线顺序很重要。在设计路线sign_up,sign_out定义为/users/sign_up(.:format)所以假设你访问sign_up网址,然后它会检查设计路线,并会在那里找到匹配。所以它会将您重定向到该路线。现在,如果您输入/users/1它会在设计路线中找到,但它将找不到匹配,因此最终它会映射到您的路线,并且如果没有定义此路线,则会发出错误..

很高兴这有所帮助。 :)

+1

感谢您的帮助和解释! – hellomello

相关问题