Ruby on rails 通过控制器传递附加信息

Ruby on rails 通过控制器传递附加信息,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个评论模型,当一个评论被创建时,它会记录下用户的配置文件名并保存它。因此,它基本上是将@user.profile\u name保存为comment.profile\u name 如果我现在想显示具有该配置文件名称的用户的其他信息,例如@user.avatar-我如何查询它,而不必在创建评论时添加要保存的额外字段 我想象我能做些像这样的事情 @user = User.all @comment_user = User.where(:profile_name => @user.profil

我有一个评论模型,当一个评论被创建时,它会记录下用户的配置文件名并保存它。因此,它基本上是将@user.profile\u name保存为comment.profile\u name

如果我现在想显示具有该配置文件名称的用户的其他信息,例如@user.avatar-我如何查询它,而不必在创建评论时添加要保存的额外字段

我想象我能做些像这样的事情

@user = User.all
@comment_user = User.where(:profile_name => @user.profile_name)
然后跑

<% @comment_user.each do |user| %>
  <%= user.first_name %>
<% end %>

在视图中,但我得到一个错误

undefined method `profile_name' for #<ActiveRecord::Relation::ActiveRecord_Relation_User:0x007fc2081c7290>
未定义的方法“profile\u name”#

即使我没有收到错误,我也不确定这是否是正确的继续方式。

错误是因为您试图在
User上调用
profile\u name
。所有
,但您需要的是单个用户。尝试:

@user = User.first
@comment_user = User.where(:profile_name => @user.profile_name)
也就是说,您应该改用ActiveRecord关联。您应该存储用户id,而不是将用户的配置文件名称存储在注释记录中。在注释模型中创建一个
属于\u to:user
关联,然后您可以直接访问其他用户属性

首先将:user\u id integer列添加到comments表中,然后定义关联:

class Comment < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :comments
end
那么在你看来,

<%= @comment.text %>
<%= @comment.user.profile_name %>

<%= @comment.text %>
<%= @comment.user.profile_name %>