Rails中有多个has_many关联

假设您有两个可以以不同方式关联的模型:

用户有许多他们创建的对话。 (一对多)用户有许多他们参与的对话。 (很多很多)

我的第一个想法是在对话表中存储创建对话的用户的ID,并将对话中涉及的用户关联到连接表中。

class User < ActiveRecord::Base has_many :conversations has_and_belongs_to_many :conversations end class Conversation < ActiveRecord::Base belongs_to :user has_and_belongs_to_many :users end 

这似乎是在寻找麻烦。

这样做的正确方法是什么? 基本上我希望能够为所涉及的人使用user.conversations,并为用户启动的那些人使用user.started_conversations。

谢谢。

关键是不要使用HABTM(其中所有关系都被认为是简单的),而是使用has_many,through,以及连接上的属性来指示表示对话的启动者/发起者的特定连接。

 class User < ActiveRecord::Base has_many :user_conversations has_many :conversations, :through => :user_conversations has_many :initiated_conversations, :through => :user_conversations, :source => :conversation, :conditions => ["user_conversations.starter = ?", true] end 

(假设您有一个名为UserConversation的连接模型,其布尔属性称为starter )。

这将让你做以下事情:

 #get conversations users, including the starter @user.conversations #get those started by the user, utilizing the attribute in the conditions @user.initiated_conversations