通过控制器传递附加信息

时间:2014-07-11 00:27:39

标签: ruby-on-rails activerecord

我有一个评论模型,当创建评论时,它会记下用户的profile_name并保存。所以它基本上将@ user.profile_name保存为comment.profile_name。

如果我现在想要显示来自具有该profile_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>

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

1 个答案:

答案 0 :(得分:2)

该错误是因为您尝试在profile_name上呼叫User.all,但您想要的是单个用户。尝试:

@user = User.first
@comment_user = User.where(:profile_name => @user.profile_name)

话虽如此,您应该使用ActiveRecord关联。您应该存储user_id,而不是将用户的profile_name存储在注释记录中。在Comment模型中创建belongs_to :user关联,然后您可以直接访问其他用户属性。

首先将一个:user_id整数列添加到comments表中,然后定义您的关联:

class Comment < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :comments
end

创建新评论时,您可以执行以下操作:

@comment = @user.comments.create(text: 'my awesome comment')

然后在你看来:

<%= @comment.text %>
<%= @comment.user.profile_name %>
相关问题