我尝试将此作为我的根路由root 'users#show'
,以便用户在登录时被带到他的个人资料中,但我遇到了这个错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=
@user = User.find(params[:id])
当我使用个人资料作为自己的标签时,<li><%= link_to "Profile", current_user %></li>
这有效,但我无法放root 'current_user'
或我收到此错误:
ArgumentError
Missing :action key on routes definition, please check your routes.
root 'current_user'
感谢您的时间。
答案 0 :(得分:2)
如果您需要将其重定向到show
操作并显示current user
的详细信息,请将current_user
设置为@user
:
def show
@user = params[:id].nil? ? current_user : User.find(params[:id])
end
答案 1 :(得分:1)
实际上,您提供的错误消息指出了问题。
如果您已根据自己提及的root "users#show"
定义了root,则会正确执行show
的{{1}}操作,但如果您已执行该操作并且#34;标准方式&#34;:
UsersController
它在这里失败了,因为没有def show
@user = User.find(params[:id])
end
。该值是从url获取的。如果您指向网址:
params[:id]
localhost:3000/users/1
有值&#34; 1&#34;。
因为您试图指向params[:id]
:
root_path
没有绑定localhost:3000
,因此:
:id
抛出异常。
如果您想以正确的方式使用#34;,请修改您的 config / routes.rb :
User.find(params[:id])
并将您的root "users#profile"
get "profile" => "users#profile"
:
UserController
假设您已实施class UserController < ApplicationController
# ...
def profile
@user = current_user # or any other logic relevant to fetching currently logged in User
end
end
方法,并返回正确的current_user
但是,你必须要注意 - 设置&#34;个人资料&#34;因为User
会导致未登录的用户看到错误页面。
希望有所帮助!
更新 - 将部分模板移至部分
您可以从 app / views / users / show.html.erb 中提取所需的代码。我们可以说,它的内容类似于:
root
您可以将其解压缩到部分 app / views / users / _user_details.html.erb ,因此它包含以下内容:
<h3><%= @user.name %></h3>
<small><%= @user.bio %></small>
请注意,<h3><%= user.name %></h3>
<small><%= user.bio %></small>
已从此处移除,在 app / views / users / show.html.erb 中,您可以全部删除代码替换为:
@
您可以在 app / views / pages / home.hmtl.erb 中使用相同内容,例如:
<%= render partial: "user_details", locals: { user: @user } %>
假设您的<% if logged_in? %>
<%= render partial: "user_details", locals: { user: @user } %>
<% end %>
中有类似的内容:
PagesController
答案 2 :(得分:0)
show action正在寻找params [:id],但在登录期间没有设置id。
尝试从current_user获取id:
def show
params[:id].nil? ? @user = current_user : @user = User.find(params[:id])
end
如果您希望以管理员身份显示其他用户的个人资料,则该条件可能会帮助您获取用户的个人资料。