我有一个Conversation
模型我想在两个用户之间关联。
将belong_to
单个用户与另一个用户作为其外键进行对话似乎并不直观。 has_and_belongs_to_many
似乎有点矫枉过正。
在另一个模型的两个实例之间连接模型的最佳方法是什么?
答案 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