2012-06-18 80 views
0

我有消息和用户模型与相应的表。
Messages表具有像user_from和user_to这样的字段。Rails3活动记录协会

如何模型关联到能够访问发件人和收件人的用户对象:

message.user_from.name 
message.user_to.id 
... 

感谢。

回答

0

我的情况下,完整的解决方案是:

belongs_to :sender, 
    :class_name => "User", 
    :foreign_key => "sender_id", 
    **:primary_key => "uid"** 

    belongs_to :recipient, 
    :class_name => "User", 
    :foreign_key => "recipient_uid", 
    **:primary_key => "uid"** 

因为用户标识不是用户表中的主键。

2

你需要更新你的消息模型是这样的:

belongs_to :user_from, :class_name => "User" 
belongs_to :user_to, :class_name => "User" 

这港岛线,可以创建通过它们的ID链接到用户表信息表下的相应字段。

+0

你的意思是belongs_to我猜。如果存储外键的表列也被称为user_from和user_to,它仍然不起作用。 –

+0

感谢您的回答。 这实际上是我做的,它不起作用。但我认为它是正确的解决方案,我的代码或数据库中还有其他一些错误。 我在我的开发机器上使用SQLight。我应该定义外键来实现这个功能吗? – Savash

1

如果db将用户id作为外键存储在消息表中,则不能为关联使用相同的名称。但是,你可以说:

class Message 
    belongs_to :from, class: 'User', foreign_key: :user_from 
    belongs_to :to, class: 'User', foreign_key: :user_from 
end 
在轨

,它是使用<assiciation_name>_id为外键的列名的最佳实践,那么你可以使用简单的

class Message 
    belongs_to :user_from, class: 'User' # foreign_key: :user_from_id by default 
    belongs_to :user_to, class: 'User' # foreign_key: :user_to_id by default 
end