我仍然是Rails的新手,我不理解为什么我无法在自定义视图模板中访问@user
。但是当它在诸如show, edit, update, destroy
例如我创建了这条路线
get 'mygroups' => 'users#mygroups'
在users_controller中我添加了
def mygroups
@user = User.find(params[:id])
end
然后我在Users下创建了一个名为mygroups.html.erb的新视图模板,并将其添加到视图中
<%= @user.first_name %>
我收到错误说
Couldn't find User with 'id'=
我有一个current_user对象虽然我可以在视图中使用而没有任何问题。
<% current_user.first_name %>
我只是不明白为什么我无法在@user
方法中加载mygroups
对象,以便在mygroups.html.erb模板中显示它。使用current_user而不是@user
有什么缺点吗?用户控制器如何显示,更新等...通过调用@user = User.find(params[:id])
来加载@user,但它不在我的方法中?
答案 0 :(得分:2)
我猜测您何时访问mygroups
路由时,您未传入ID,因此错误消息显示该消息为空白。默认的CRUD用户操作(显示,更新等)都将设置路由以期望id,并且任何指向这些操作的链接(或表单URL等)都将通过相关用户ID。
在这个意义上,@user
和current_user
之间的区别在于current_user
通常是基于当前会话的经过身份验证的用户。但是,用户控制器中的@user
是正在对其执行操作的用户。想象一下,您有一个应用程序,其中current_user
是某种管理员,并且该管理员可以创建,读取,更新和销毁其他用户。正在执行的@user
是特定用户,而不是当前经过身份验证的用户。
如果您确定希望它适用于任何用户,请尝试使用ID mygroups
访问您的/mygroups?id=USER_ID
路由 - 如果您只想要它为当前用户工作,丢失User.find
查找并改为使用current_user。
希望有所帮助!
答案 1 :(得分:1)
current_user
几乎总是(99%的时间)当前登录用户。此方法在ActionController中定义(在您的情况下为幕后)。
您的错误消息表明没有id
参数,无论是通过POST参数还是查询字符串中的参数。
由于您是Rails的新手,您可能会发现经典的Rails教程非常有用。 https://www.railstutorial.org/