我有一个模型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
在DB中只有一个名称。
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
关联中名称的唯一性?
发布于 2019-01-24 01:22:04
因此,您需要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
https://stackoverflow.com/questions/54342903
复制相似问题