Rails Activerecord协会

时间:2012-06-18 10:19:16

标签: ruby-on-rails-3 activerecord associations

我有消息和用户模型以及相应的表格 Messages表包含user_from和user_to等字段。

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

您需要像这样更新您的消息模型:

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

这将在按摩表下创建相应的字段,通过其ID链接到User表。

答案 1 :(得分:1)

如果db将用户ID存储为messages表中的外键,则不能对关联使用相同的名称。但你可以说:

class Message
  belongs_to :from, class: 'User', foreign_key: :user_from
  belongs_to :to, class: 'User', foreign_key: :user_from
end
在rails中,最好使用<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

答案 2 :(得分: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"**

因为用户ID不是User表中的主键。