正好有2个对象之间的ActiveRecord关联

时间:2014-07-01 18:58:57

标签: ruby-on-rails activerecord

我有一个Conversation模型我想在两个用户之间关联。

belong_to单个用户与另一个用户作为其外键进行对话似乎并不直观。 has_and_belongs_to_many似乎有点矫枉过正。

在另一个模型的两个实例之间连接模型的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这似乎不直观,但我就是这样做的。

与2个用户ID进行对话,例如user1_id和user2_id,然后在对话模型中,我将为每个用户提供2个不同的名称:

class Conversation < ActiveRecord::Base
  belongs_to :speaker, class_name: 'User', foreign_key: 'user1_id'
  belongs_to :listener, class_name: 'User', foreign_key: 'user2_id'
  ...
  def users
    [speaker, listener].compact
  end
  ...
  def efficient_users
    User.where(id: [user1_id, user2_id])
  end
  ...
end

答案 1 :(得分:0)

这听起来不错吗?

class User
 has_many :relationships
 has_many :conversations, through: relationships

class Relationship
 belongs_to :user
 belongs_to :conversation

class Conversation
 has_many :relationships #just has 2