如何防止通过联接以多对多关系冗余创建对象

时间:2019-12-09 19:24:55

标签: ruby-on-rails ruby

我正在使用Rails构建用于论坛/聊天室的API。我有三种型号:

class User < Application record
  has_many messages
  has_many :forums, through: :messages

class Message < ApplicationRecord
  belongs_to :user
  belongs_to :forum
end

class Forum < ApplicationRecord
  has_many :messages
  has_many :users, through: :messages
end

这个想法是,登录的用户可以是多个不同论坛的一部分,并在该特定论坛中创建消息。

用户创建新消息时,每次还会创建一个新论坛。因此,同一个user1多次在“通用”论坛中发帖,导致:

User1.forums=["GENERAL","GENERAL","GENERAL"]

这打破了我的前端。

是否存在一种建立关联的方式,如果用户已经拥有该论坛,则不要在其论坛列表中添加相同的关联?

1 个答案:

答案 0 :(得分:0)

您可以在关联上定义distinct范围:

has_many :forums, -> { distinct }, through: :messages

box-sizing: content-box

编辑:如果您的代码实际上是在创建多个论坛,那么这将无济于事,因为这些论坛将不一样;如果是这种情况,请显示您的表单和您的控制器;如果您要在每条创建的消息上创建论坛,还有另一个问题