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 |