您如何在 ruby 中强制执行 rails 迁移的唯一性?
how do you enforce uniqueness in ruby on rails migration?
基于 http://guides.rubyonrails.org/v3.2.21/migrations.html 和
给定以下迁移:
class CreateVacations < ActiveRecord::Migration
def change
create_table :vacations do |t|
t.string :name
t.string :slug, :uniqueness => true
t.datetime :starts_at
t.datetime :ends_at
t.timestamps
end
end
end
我 运行 耙 db:migrate 并看到这个架构:
ActiveRecord::Schema.define(:version => 20150825170615) do
create_table "vacations", :force => true do |t|
t.string "name"
t.string "slug"
t.datetime "starts_at"
t.datetime "ends_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
我认为 'slug' 没有任何唯一性要求。如果我做错了,我现在该如何解决?
如果它是正确的,为什么架构不说它是唯一的?谢谢
您需要创建索引以在数据库级别强制执行唯一性:
add_index :vacations, :slug, unique: true
基于 http://guides.rubyonrails.org/v3.2.21/migrations.html 和 给定以下迁移:
class CreateVacations < ActiveRecord::Migration
def change
create_table :vacations do |t|
t.string :name
t.string :slug, :uniqueness => true
t.datetime :starts_at
t.datetime :ends_at
t.timestamps
end
end
end
我 运行 耙 db:migrate 并看到这个架构:
ActiveRecord::Schema.define(:version => 20150825170615) do
create_table "vacations", :force => true do |t|
t.string "name"
t.string "slug"
t.datetime "starts_at"
t.datetime "ends_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
我认为 'slug' 没有任何唯一性要求。如果我做错了,我现在该如何解决?
如果它是正确的,为什么架构不说它是唯一的?谢谢
您需要创建索引以在数据库级别强制执行唯一性:
add_index :vacations, :slug, unique: true