Ruby on rails 如何防止在具有联接的多对多关系中冗余创建对象

Ruby on rails 如何防止在具有联接的多对多关系中冗余创建对象,ruby-on-rails,ruby,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_m

我正在用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
这是打破我的前端


是否有一种方法可以设置关联,如果用户已经拥有此论坛,则不会将相同的论坛添加到其论坛列表中?

您可以在关联上定义一个
不同的
范围:

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


编辑:如果您的代码实际上正在创建多个论坛,那么它将不会有帮助,因为论坛将不一样,如果是您的情况,那么显示您的表单和控制器,如果您正在为每个创建的邮件创建论坛,您会遇到另一个问题

您可以在“创建”方法上检查该问题,如果用户已经创建了一些论坛,则可以跳过该方法。或者你可以做一些验证,请查看此页面了解更多信息,并尝试在此处找到解决方案:欢迎使用SO!了解a和a之间的区别。一套会自动做你想做的。谢谢!是的,这是一个解决方案,它不是创建一个额外的论坛。它只是不断为user.forums的同一个论坛添加一个条目,用于创建的每一条附加消息。这有帮助。
has_many :forums, -> { distinct }, through: :messages