Ruby on 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的新视图模板,并将其添加到视图中 <%=

我还是Rails的新手,我不明白为什么我不能在自定义视图模板中访问
@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 %>