我有一个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
关联中名称的唯一性?
答案 0 :(得分:1)
所以您想对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