创建对范围具有唯一性的迁移
Create migration with uniqueness to a scope
我想创建一个生成如下模型的迁移:
# Table name: cities
#
# country_code :text
# created_at :datetime not null
# id :integer not null, primary key
# name :string
# updated_at :datetime not null
#
class City < ActiveRecord::Base
validates :name, presence: true, uniqueness: {:scope => :country_code,
message: "A name and country already exists for this entry" }
end
如何创建一个standalone migration来创建这个模型?
我能够使 :name
在整个 table 中独一无二:
rails g migration CreateCitites name:string:uniq country_code:text timezone:text
我在创建 :name
相对于 :country_code
的唯一性时遇到问题。
示例:
name: Sydney, country_code: Australia
name: Sydney, country_code: Germany
应该允许
name: Sydney, country_code: Australia
name: Sydney, country_code: Australia
不应该被允许
在数据库中的两列之间强制执行唯一性的一种方法是在这些列上创建唯一索引。
您无法从命令行创建此类迁移,但您可以在生成迁移文件后对其进行更改。
def up
create_table :cities do
# etc.
end
# Add your index declaration here, after "create_table"
add_index :cities, [:contry_code, :name], unique: true
end
我想创建一个生成如下模型的迁移:
# Table name: cities
#
# country_code :text
# created_at :datetime not null
# id :integer not null, primary key
# name :string
# updated_at :datetime not null
#
class City < ActiveRecord::Base
validates :name, presence: true, uniqueness: {:scope => :country_code,
message: "A name and country already exists for this entry" }
end
如何创建一个standalone migration来创建这个模型?
我能够使 :name
在整个 table 中独一无二:
rails g migration CreateCitites name:string:uniq country_code:text timezone:text
我在创建 :name
相对于 :country_code
的唯一性时遇到问题。
示例:
name: Sydney, country_code: Australia
name: Sydney, country_code: Germany
应该允许
name: Sydney, country_code: Australia
name: Sydney, country_code: Australia
不应该被允许
在数据库中的两列之间强制执行唯一性的一种方法是在这些列上创建唯一索引。
您无法从命令行创建此类迁移,但您可以在生成迁移文件后对其进行更改。
def up
create_table :cities do
# etc.
end
# Add your index declaration here, after "create_table"
add_index :cities, [:contry_code, :name], unique: true
end