Ключ не в том, чтобы использовать HABTM (где все отношения считаются простыми), а в том, чтобы использовать has_many, with, с атрибутом в соединении, чтобы указать конкретное соединение, которое обозначает инициатора / инициатора разговора.
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