我试图在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
创建的行而不是创建新行。我是否需要更改模型中的某些内容或者作业是否笨拙?
答案 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将负责此