我正在使用带有Devise的Rails 4并创建了一个配置文件页面,我想在其中显示该特定用户的ID和用户名。但是只要我想访问用户数据,我就会收到错误消息: nil的未定义方法`id':NilClass
我的users_controller.rb:
def profile
@user = User.find_by_username(params[:username])
end
我的观点
<%= @user.id %>
路线
get ':username' => 'users#profile'
怎么了?
感谢任何帮助,谢谢。
答案 0 :(得分:3)
Devise创建一个方法current_user
,您可以在控制器和视图上下文中引用它 - 它具有User
模型的所有方法。所以,只需做
current_user.username
或
<%= current_user.id %>
不需要路线,不需要取景器 - 所有都是为你设计的。
答案 1 :(得分:0)
如果您为/:用户名设置路线(如http://example.com/username中所示)以显示用户个人资料,则需要修改您在控制器中获取个人资料的方式。
def action
@user = User.find_by(username: params[:username])
end
在此视图中,您应该能够访问该用户的各个方面。
@user.username -> username
@user.id -> id of @user
您收到undefined method 'id' for nil:NilClass
的原因是因为您的操作无法找到指定用户名参数的用户,因此要尝试跟踪此问题,请使用rails console
与您进行互动数据库并尝试查找代码在从路由接收参数时尝试查找的同一用户。
答案 2 :(得分:0)
供将来参考。我正在解决类似的问题,并尝试了以上所有,我没有任何运气。我想我会在这里添加它,以防其他人遇到相同或类似的问题。
Localhost - 根据数据库的结构,有两种方法可以查看用户配置文件。
1)localhost:3000 / usersname
2)localhost:3000 / users / 1(或localhost:3000 / users / usersname) - &gt;这使用“user_id”。
在“视图”中,Show.html.erb文件:
<%= @user.name %>