如何在Rails迁移中实现ruby的唯一性?

how do you enforce uniqueness in ruby on rails migration?

本问题已经有最佳答案,请猛点这里访问。

基于http://guides.rubyonrails.org/v3.2.21/migrations.html和
进行以下迁移:

1
2
3
4
5
6
7
8
9
10
11
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并看到了以下架构:

1
2
3
4
5
6
7
8
9
10
11
12
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
add_index :vacations, :slug, unique: true