创建具有范围唯一性的迁移

Col*_*tel 2 migration activerecord ruby-on-rails rails-console

我想创建一个迁移来生成一个如下所示的模型:

# 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
Run Code Online (Sandbox Code Playgroud)

如何创建独立迁移来创建此模型?

我能够:name在整个桌子上制作独一无二的:

rails g migration CreateCitites name:string:uniq country_code:text timezone:text
Run Code Online (Sandbox Code Playgroud)

我在创建:name相对于:country_code.


例子:

名称:悉尼,国家代码:澳大利亚

名称:悉尼,国家代码:德国

应该允许

名称:悉尼,国家代码:澳大利亚

名称:悉尼,国家代码:澳大利亚

不应该被允许

dim*_*ura 6

在数据库中的两列之间强制执行唯一性的一种方法是在这些列上创建唯一索引。

您无法从命令行创建这种类型的迁移,但您可以在迁移文件生成后对其进行更改。

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
Run Code Online (Sandbox Code Playgroud)

  • **您不能从命令行创建这种类型的迁移** (2认同)