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

问题描述 投票:0回答:1

我正在使用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在“ GENERAL”论坛中多次发布,导致:

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

这破坏了我的前端。

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

ruby-on-rails ruby
1个回答
0
投票

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

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

https://guides.rubyonrails.org/association_basics.html#scopes-for-has-many-distinct

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

© www.soinside.com 2019 - 2024. All rights reserved.