我一直收到这个错误,我不知道为什么。
这是我的用户控制器:
def show
@user = User.find_by(id: params[:id])
end
以及我尝试过的事情
@user = User.find_by_id(params[:id])
@user = User.find(params[:id])
我目前的HTML:
<li><%= link_to "Profile", user_path(@user, show) %></li>
以及我的尝试:
<li><%= link_to "Profile", user_path(@user) %></li>
<li><%= link_to "Profile", user_path(@user.id) %></li>
<li><%= link_to "Profile", "/users/#{@user.id}" %></li>
<li><%= link_to "Profile", user_path %></li>
<li><%= link_to "Profile", user_show_path %></li>
帮助表示感谢。谢谢!
rake routes
routes
答案 0 :(得分:3)
请注意:find_by
可以返回nil。所以你必须在使用前检查它。
def show
@user = User.find_by(id: params[:id])
unless @user
render status: 404, nothing: true
end
end
我认为这是你的理由。 find_by
只返回nil
答案 1 :(得分:0)
您需要提供更多详细信息。我们需要确保您尝试访问实际存在的视图(用户)的用户。您可以通过以下方式做一些事情来检查:
$ rails console --sandbox
Loading development environment in sandbox (Rails 4.2.1)
Any modifications you make will be rolled back on exit
2.2.3 :001 > User.all.count
(12.5ms) SELECT COUNT(*) FROM "users"
=> 2
2.2.3 :002 > id = User.first.id
User Load (1.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> 3
2.2.3 :003 > app.user_path(id: id)
=> "/users/3"
2.2.3 :004 >
确保User.all.count
返回一个大于0的数字。如果它为0则没有用户,你需要创建一个。
答案 2 :(得分:0)
好的,这是捕获,我发现您已经使用了gem devise,并且您正尝试在CRUD
上执行USER
,因此设计了默认路由,以帮助用户控制日志记录进出是最重要的传统users
行为。
请参考How To: Manage users through a CRUD interface
或请参阅之前的帖子Devise registration controller conflict with my own “registrations” controller
我希望能清除你们所有的疑虑。干杯
答案 3 :(得分:0)
我需要添加user_path(current_user)
而不是尝试获取ID。谢谢大家!