Rails 5: Как избежать создания нескольких строк для одного объекта с отношением has_many? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть модель 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 голосов
/ 12 сентября 2018

Вы должны добавить проверку уникальности в свой ContactFormUsership:

validates :user_id, presence: true, uniqueness: { scope: :contact_form_id }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...