Проверка уникальности в ассоциации has_and_belongs_to_many - PullRequest
0 голосов
/ 24 января 2019

У меня есть модель AnimalType, которая has_and_belongs_to_many :trainers, join_table: 'trainers_animal_types', и мне нужно правило проверки, чтобы я мог создавать тренера только с существующими типами животных, чтобы у тренера не было дублированных типов животных.Например, тренер может иметь типы животных ['Cat', 'Dog'], а не ['Cat', 'Cat', 'Dog', 'Dog']

class AnimalType < ApplicationRecord
  has_and_belongs_to_many :trainers, join_table: 'trainers_animal_types'
end

AnimalType имеет только имя в БД.

create_table "animal_types", force: :cascade do |t|
  t.string   "name"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

Таблица присоединения

create_table "trainers_animal_types", id: false, force: :cascade do |t|
  t.integer "trainer_id"
  t.integer "animal_type_id"
end

Есть ли способ проверить уникальность имени в has_and_belongs_to_many ассоциации?

1 Ответ

0 голосов
/ 24 января 2019

так что вы хотите уникальность для поля name в таблице animal_types верно?если да, то

вы можете добавить уникальный индекс в таблице, например

rails generate migration add_index_to_animal_types

# migration file
add_index :animal_types, :name, :unique => true

, затем в animal.rb

validates :name, uniqueness: true

и если вы хотите проверить уникальность в принадлежностях и во многих таблицах, вы можете добавить уникальный индекс, например

rails generate migration add_index_to_trainer_animal_types

# migration file
add_index :trainer_animal_types, [:trainer_id, :animal_type_id], :unique => true
add_index :trainer_animal_types, :trainer_id
add_index :trainer_animal_types, :animal_type_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...