2016-09-25 113 views
0

我有一个Users模型与has_many :comments 每个评论记录current_usercommenter列。如何从子表中获取信息

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

目前在comments_controller中使用:@commenter = User.find("2")会拉出正确的信息。我想用线沿线的东西:@commenter = User.find_by_id(:commenter)

+0

你能否提供一些实际的代码(例如模型代码)?真的很难理解你的模型关系看起来像读这个。 –

+0

你的数据库模式也会有所帮助。我不明白你为什么使用'commenter'作为你的列名,标准格式对'belongs_to'关系是'user_id'。 –

+0

@ChrisSalzberg对不起,我正在使用user_id将评论与用户页面相匹配,评论者仅针对发布评论的用户。此外,除了belongs_to/has_many之外,还没有关于评论的模型代码 – aidiah

回答

1

从评论,这听起来像你有这样的Comment型号:

class Comment < ActiveRecord::Base 
    belongs_to :user 
end 

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

class User < ActiveRecord::Base 
    has_many :comments 
end 

还有在comments表来存储谁张贴该评论的用户(在OTH一个commenter列呃用户的页面)。

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

假设你对commentscommenter_id列,那么您需要定义一个关系如下:

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 

只要您设置您的列名和模型正确,处理获取信息这应该是很简单的。

+0

这工作,但没有@符号,只是'comment.commenter。用户名' – aidiah

+0

很高兴听到! –