Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RubyonRails迁移中实现唯一性?_Ruby On Rails_Ruby_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 如何在RubyonRails迁移中实现唯一性?

Ruby on rails 如何在RubyonRails迁移中实现唯一性?,ruby-on-rails,ruby,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3.2,基于 考虑到以下迁移: 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

基于 考虑到以下迁移:

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
我不认为“slug”有任何唯一性要求。如果我做错了,我怎么能在这一点上修复它


如果它是正确的,为什么模式不说它是唯一的?谢谢

您需要创建一个索引,以便在数据库级别强制执行唯一性:

add_index :vacations, :slug, unique: true

如果我改变旧的迁移并运行db:migrate,它会崩溃吗?我应该把索引放在哪里?在迁移文件中?如果尚未签入到代码存储库的迁移,则只需运行
rake db:rollback
,编辑迁移(添加该行),然后再次执行
rake db:migrate
。否则,只需为索引创建另一个迁移
add_index :vacations, :slug, unique: true