has_and_belongs_to_many 关联的唯一性验证
Uniquness validation on has_and_belongs_to_many association
我有一个模型 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
加入table
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
关联中名称的唯一性?
所以您希望 animal_types
table 中的 name
字段具有唯一性,对吗?如果是,那么
您可以在 table 中添加唯一索引,例如
rails generate migration add_index_to_animal_types
# migration file
add_index :animal_types, :name, :unique => true
然后在 animal.rb
validates :name, uniqueness: true
如果你想验证属于的唯一性并且有很多 tables 你可以添加唯一索引,比如
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
我有一个模型 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
加入table
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
关联中名称的唯一性?
所以您希望 animal_types
table 中的 name
字段具有唯一性,对吗?如果是,那么
您可以在 table 中添加唯一索引,例如
rails generate migration add_index_to_animal_types
# migration file
add_index :animal_types, :name, :unique => true
然后在 animal.rb
validates :name, uniqueness: true
如果你想验证属于的唯一性并且有很多 tables 你可以添加唯一索引,比如
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