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