Ruby / Rails,ActiveRecord唯一性验证和activerecord-import gem

时间:2012-02-27 08:15:11

标签: ruby-on-rails ruby-on-rails-3 activerecord

在我的RESTful API中,我对ActiveRecord类中的某些数据库列“X”进行了唯一性验证,并且我使用activerecord-import gem来批量保存数据。在以下两种情况下,我的应用都应拒绝请求:

  1. 如果数据库中存在具有相同“X”值的记录
  2. ,则拒绝新对象
  3. 拒绝批量保存两个具有相同“X”值的对象
  4. 似乎(1.)工作正常,但(2.)不是。这是预期的(可能是因为ActiveRecord唯一性验证是在db之外“执行”),如果是,除了在导入新数据之前手动验证之外,还有简单的方法来处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

activerecord-import gem enforces validations by default,但可能以不同方式处理唯一性验证。如果数据库支持它,则会有一个on_duplicate_key_update,如果找到重复的密钥,它将更新另一列。 More about this on the wiki。 MySql支持它。

因此,只要有尝试保存重复项,您就可以拥有一个通过on_duplicate_key_update更新的标记类型列。或者你必须手动进行一次验证

修改 答案可能不正确,请参阅OP的评论以获取详细信息。