我正在使用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"]
这破坏了我的前端。
是否有一种建立关联的方式,如果用户已经拥有这个论坛,不要在其论坛列表中添加相同的关联?
您可以在关联上定义distinct
范围:
has_many :forums, -> { distinct }, through: :messages
https://guides.rubyonrails.org/association_basics.html#scopes-for-has-many-distinct
编辑:如果您的代码实际上是创建多个论坛,那么这将无济于事,因为这些论坛将不一样;如果是您的情况,请显示您的表单和您的控制器;如果您要对每条创建的消息创建论坛另一个问题