2016-04-21 60 views
2

当我尝试加载用户的放映视图,它得到了UsersController错误Couldn't find User with 'id'=轨找不到用户与“ID” =

它专门指向二线

def show 
@user = User.find(params[:id]) ## shows the error in this line 
end 

有趣的是,它二手加载,直到我改变了路线这样:

Rails.application.routes.draw do 
    devise_for :users 
    get 'users/show' 
    root 'users#show' 
    get 'welcome/index' 
    resources :users 
end 

为什么我在更改路由后出现此错误?(我改变了,因为我的目标是在设计登录后直接进入用户配置文件)它如何修复?

哦,下面是我的情况下,用户放映视图错误是在那里:

<h1>This is the user show view </h1> 
<p>Your email is: <%= @user.email %></p> 
<p>Your name is: <%= @user.name %></p> 

谢谢。

+0

如果您想在登录后进入'show'动作而不是'@user = User.find(params [:id])',您可以执行'@user = cu rrent_user' – dp7

+0

这样做,非常感谢! – sergio

+0

我已将它添加为答案。很高兴它对你有效! – dp7

回答

0

这不起作用:

root 'users#show' 

它告诉轨使用用户#显示为起始页 但Rails不知道它应该显示哪些用户,然后页面。那么没有给出用户标识。这就是为什么你在错误信息id=中看到没有等号后面的东西。

+0

注意到,这是有道理的,谢谢。 但是,上面的答案让我只需将用户控制器中的show操作更改为: @user = current_user#(而不是:User.find(params [:id]) 这有效,但也可以接受,或者会在后面造成负面影响吗? – sergio

+0

它可以工作,但是,show动作不能再显示另一个用户的页面。 – Meier

0

默认情况下,设计将您重定向到根路径。

默认根路径'welcome/index'是一个集合操作。也就是说,它不需要传入一个id。

现在您已将其更改为成员操作'users/show /:id'。所以你需要传入ID。

最简单的方法是重写色器件在应用控制器是这样的:

def after_sign_in_path_for(resource)  
    redirect_to root_path(current_user.id) 
end  
1

如果你想去显示登录后的行动,而不是

@user = User.find(params[:id]) 

你可以这样做:

@user = current_user