Ruby on Rails - 与模型的多对多关联

时间:2015-02-13 11:18:15

标签: ruby-on-rails ruby

我试图在Rails中创建一个消息传递系统。用户与会话的关联应该是多对多的,因此用户可以与多个用户进行多次对话和对话。因此,我创建了三个表用户,conversation_relations和对话以及每个用户的模型。

模型看起来像:

class User < ActiveRecord::Base
    has_many :conversation_relations
    has_many :conversations, through: :conversation_relations
end

class Conversation < ActiveRecord::Base
    has_many :conversation_relations
    has_many :users, through: :conversation_relations
end

class ConversationRelation < ActiveRecord::Base
    belongs_to :user
    belongs_to :conversation
end

我的问题是,当我尝试将多个用户分配给对话时,会更新conversation_relations表中的条目,而不是创建新条目。

e.g。 (在控制台上):

conversation = Conversation.create()
user1 = User.find(1)
user2 = User.find(2)
relation = ConversationRelation.new()

conversation.conversation_relations << relation
user1.conversation_relations << relation
user2.conversation_relations << relation

问题发生在最后一行,因为它更新user1.conversation_relations << relation创建的行而不是创建新行。我是否需要更改模型中的某些内容或者作业是否笨拙?

2 个答案:

答案 0 :(得分:0)

而不是 conversation.conversation_relations << relation

你必须使用 conversation.conversation_relations.create(params)

使用给定选项返回的值,您现在可以使用&lt;&lt;并且将添加新的conversation_relation

答案 1 :(得分:0)

只做

user1.conversations << conversation
# or
conversation.users << user1

无需进行ConversationRelation.new,rails将负责此