Rails 5:如何避免为具有has_many关系的单个对象创建多行?

时间:2018-09-12 12:31:00

标签: ruby-on-rails

我有一个User模型和一个ContactForm模型。一个用户可以有多个联系表,同样,一个联系表可以有多个用户。

class User < ApplicationRecord
  has_many :contact_form_userships
  has_many :contact_forms, through: :contact_form_userships
end

class ContactForm < ApplicationRecord
  has_many :contact_form_userships
  has_many :users, through: :contact_form_userships
end

class ContactFormUsership < ApplicationRecord
  belongs_to :user
  belongs_to :contact_form
end

我正在通过名为ContactFormUsership的联接表来关联这两个模型。

我假设一个用户只能添加一次到属于联系表单的用户列表中。但是我发现事实并非如此。如果我多次将用户添加到联系表单,则会为该用户创建多行:

contact_form = ContactForm.create
user = users(:user_1)

10.times do
  contact_form.users << user
end

> contact_form.users.count
=> 10

> contact_form.users.map(&:id).uniq.count
=> 1

无论我在contact_form.users上按下多少行,如何确保只为用户创建一行?

1 个答案:

答案 0 :(得分:0)

您应该向ContactFormUsership添加唯一性验证:

caseModelRepository.findNotUsedCasemodels();