Ruby on rails null false不会触发rails中的错误,并且unique不起作用

Ruby on rails null false不会触发rails中的错误,并且unique不起作用,ruby-on-rails,ruby,Ruby On Rails,Ruby,迁移中的rails非空/唯一不会触发错误:S class CreateDeditProjects < ActiveRecord::Migration def change create_table :dedit_projects do |t| t.string :name, :null => false t.string :uid, :unique => true t.boolean :status t.timest

迁移中的rails非空/唯一不会触发错误:S

class CreateDeditProjects < ActiveRecord::Migration
  def change
    create_table :dedit_projects do |t|
      t.string :name, :null => false
      t.string :uid, :unique => true
      t.boolean :status

      t.timestamps null: false
    end
  end
end
嗯,我想我需要在某个地方添加索引?这不应该是自动的吗


但NOTNULL问题是假的。

Rails会自动在id和引用上添加索引,可能还会在其他类型上添加索引。如果要添加新索引,可以创建迁移:

  def change
    add_index :dedit_projects, :uid, unique: true
  end

您还可以在模型中使用validations验证的唯一性和存在性。虽然我不明白为什么它不能按原样工作:

唯一性是索引的一个属性,所以您需要单独调用来添加索引,或者像这样编写索引

create_table :dedit_projects do |t|
  t.string :uid, index: {unique: true}
  ...
end

添加迁移也不起作用。。。这里有些可疑之处。我想,若表已经有非唯一字段,则此迁移不会添加索引。还是真的?发现了一个相关的问题。似乎您必须为唯一字段创建索引:@slavenwhat使您认为t.string采用了:unique选项?@muistooshort common sense?空和空且不相同thing@FrederickCheung我意识到,db不是空的。这解决了第一个问题。关于第二个问题,应在create_表之外声明unique。
create_table :dedit_projects do |t|
  t.string :uid, index: {unique: true}
  ...
end