我的ActiveRecord模型中有一个validate_uniqueness_of:字段。当我做一个单独的创建/更新它很好,但我必须从事务中的csv文件做一些大批量创建 当我在事务中时,validate_uniqueness_of没有检测到错误并且模型已保存!
答案 0 :(得分:3)
是否可以在交易期间创建非唯一值?
验证方法在事务之前检查,然后表中的所有值仍然不存在,因此是唯一的。
编辑:创建一个索引,为您的字段启用了唯一属性,该事务将失败,从而阻止添加非唯一元素。 要做一些,你应该在你的迁移文件中添加一些东西
add_index("tablename", "fieldname", { :name => "fieldname_index", :unique => true })
编辑2:像这样的事务会给出类似“ActiveRecord :: StatementInvalid:Mysql :: Error:重复条目'123'的密钥1:< sql statement here>”错误。
Table.transaction do
i1 = Table.new
i1.fieldname = "123"
i1.save
i2 = Table.new
i2.fieldname = "123"
i2.save
end
答案 1 :(得分:0)
validates_uniqueness_of受竞争条件的限制,您仍需要在数据库上拥有适当的唯一约束。您正在描述this situation。该链接提供了一些解决方案。