代码之家  ›  专栏  ›  技术社区  ›  PanosJee

验证的唯一性在执行大型事务时不起作用

  •  2
  • PanosJee  · 技术社区  · 15 年前

    当我在事务中时,的validate_university_不会检测到错误,并且模型被保存!

    2 回复  |  直到 15 年前
        1
  •  3
  •   Veger    15 年前

    编辑: 为字段创建一个启用了unique属性的索引,事务将失败,从而阻止添加非唯一元素。 要执行某些操作,您应该在迁移文件中添加以下内容

    add_index("tablename", "fieldname", { :name => "fieldname_index", :unique => true })
    

    编辑2: 这样的事务将给出类似“ActiveRecord::StatementInvalid:Mysql::Error:键1的重复条目“123”:<此处的sql语句>错误。

    Table.transaction do
      i1 = Table.new
      i1.fieldname = "123"
      i1.save
      i2 = Table.new
      i2.fieldname = "123"
      i2.save
    end
    
        2
  •  0
  •   Jarrett Meyer    15 年前

    验证的唯一性取决于竞争条件,并且您仍然需要对数据库具有适当的唯一性约束。你在描述 this situation . 该链接提供了一些解决方案。