如何在rails迁移中强制执行ruby中的唯一性?

时间:2015-08-25 17:29:18

标签: ruby-on-rails ruby ruby-on-rails-3.2

基于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

我运行rake 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'有任何独特性要求。如果我做错了,我怎么能在这一点上解决它?

如果它是正确的,为什么架构不能说它是独一无二的?谢谢

1 个答案:

答案 0 :(得分:3)

您需要创建索引才能在数据库级别强制实施唯一性:

add_index :vacations, :slug, unique: true