如何从子表中获取信息

时间:2016-09-25 05:25:12

标签: ruby-on-rails devise

我有一个Users模型has_many :comments 每条评论都会将current_user记录到commenter列。

如何在我的视图中调用@ commenter.username并显示评论者的用户名?

目前在comments_controller中使用:@commenter = User.find("2")将提取正确的信息。我想使用以下内容:@commenter = User.find_by_id(:commenter)

1 个答案:

答案 0 :(得分:1)

从评论中,听起来你有这个Comment模型:

class Comment < ActiveRecord::Base
  belongs_to :user
end

评论模型代表用户页面上的评论,其中用户模型定义为:

class User < ActiveRecord::Base
  has_many :comments
end

commenter表格上还有一个comments列,用于存储发布评论的用户(在另一个用户的页面上)。

首先,我建议使用commenter_id作为此列,而不是commenter,因为这是存储任何类型的ID的惯例。

假设您在commenter_id表上有一个comments列,那么您将按如下方式定义第二个关系:

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :commenter, class_name: "User", foreign_key: :commenter_id
end

commenter关系定义撰写评论的用户,而不是评论所在页面的用户

对于此关系的另一方,请更新您的User模型:

class User < ActiveRecord::Base
  has_many :comments
  has_many :page_comments, class_name: "Comment", foreign_key: :commenter_id
end

此处,page_comments定义了此用户在其他用户的网页上发布的评论。

然后,如果你有一个@comment,你可以简单地得到评论者的名字:

@comment.commenter.name

只要您正确设置列名和模型,处理获取此类信息应该非常简单。