Ruby on rails @视图中的用户与当前用户
我还是Rails的新手,我不明白为什么我不能在自定义视图模板中访问Ruby on rails @视图中的用户与当前用户,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我还是Rails的新手,我不明白为什么我不能在自定义视图模板中访问@user。但是,当它在一个标准操作中被调用时,如显示、编辑、更新、销毁 例如,我创建了这个路由 get 'mygroups' => 'users#mygroups' 在我添加的用户和控制器中 def mygroups @user = User.find(params[:id]) end 然后,我在Users下创建了一个名为mygroups.html.erb的新视图模板,并将其添加到视图中 <%=
@user
。但是,当它在一个标准操作中被调用时,如显示、编辑、更新、销毁
例如,我创建了这个路由
get 'mygroups' => 'users#mygroups'
在我添加的用户和控制器中
def mygroups
@user = User.find(params[:id])
end
然后,我在Users下创建了一个名为mygroups.html.erb的新视图模板,并将其添加到视图中
<%= @user.first_name %>
我有一个当前的用户对象,但是我可以在视图中使用它,而不会有任何问题
<% current_user.first_name %>
我只是不明白为什么我不能在我的
mygroups
方法中加载@user
对象,让它显示在mygroups.html.erb模板中。使用当前用户而不是@user
是否有任何缺点?为什么用户控制器有显示、更新等。。。通过调用@user=user.find(params[:id])
加载@user,但在我的方法中没有这样做?当前用户几乎总是(99%的时间)当前登录的用户。此方法在ActionController中定义(在您的案例中是在幕后)
无论是通过已发布的参数还是查询字符串中的参数,您的错误消息都表明没有id
param
由于您是Rails新手,您可能会发现经典的Rails教程是一本非常有用的书 当前用户几乎总是(99%的时间)当前登录用户。此方法在ActionController中定义(在您的案例中是在幕后)
无论是通过已发布的参数还是查询字符串中的参数,您的错误消息都表明没有id
param
由于您是Rails新手,您可能会发现经典的Rails教程是一本非常有用的书 我猜当您访问mygroups
路由时,您没有传递id,因此错误消息说它是空的。默认的CRUD用户操作(显示、更新等)都将设置预期id的路由,并且指向这些操作(或表单URL等)的任何链接都将通过有问题的用户id传递
从这个意义上讲,@user
和当前用户
之间的区别在于,当前用户
通常是基于当前会话的经过身份验证的用户。但是,用户控制器中的@user
是被操作的用户。假设你有一个应用程序,其中你的当前用户是某种管理员,该管理员可以创建、读取、更新和销毁其他用户。被操作的@user
是特定用户,而不是当前经过身份验证的用户
尝试使用id访问您的mygroups
路由,/mygroups?id=USER\u id
,如果您确定它适用于任何用户-如果您只希望它适用于当前用户,请丢失用户。查找查找,只需使用当前用户即可
希望有帮助 我猜当您访问mygroups
路由时,您没有传递id,因此错误消息说它是空的。默认的CRUD用户操作(显示、更新等)都将设置预期id的路由,并且指向这些操作(或表单URL等)的任何链接都将通过有问题的用户id传递
从这个意义上讲,@user
和当前用户
之间的区别在于,当前用户
通常是基于当前会话的经过身份验证的用户。但是,用户控制器中的@user
是被操作的用户。假设你有一个应用程序,其中你的当前用户是某种管理员,该管理员可以创建、读取、更新和销毁其他用户。被操作的@user
是特定用户,而不是当前经过身份验证的用户
尝试使用id访问您的mygroups
路由,/mygroups?id=USER\u id
,如果您确定它适用于任何用户-如果您只希望它适用于当前用户,请丢失用户。查找查找,只需使用当前用户即可
希望有帮助 多谢各位。你是对的,我在访问路线时没有传递id。我将其更改为“get”mygroups/:id'=>“users#mygroups'`然后执行mygroups/1并加载页面。同时感谢您对当前用户的解释。谢谢。你是对的,我在访问路线时没有传递id。我将其更改为“get”mygroups/:id'=>“users#mygroups'`然后执行mygroups/1并加载页面。还感谢您对当前用户的解释。
<% current_user.first_name %>