您如何在 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