【问题标题】:Ruby/Rails, ActiveRecord uniqueness validation and activerecord-import gemRuby/Rails、ActiveRecord 唯一性验证和 activerecord-import gem
【发布时间】:2012-02-27 08:15:10
【问题描述】:

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

  1. 如果数据库中存在具有相同“X”值的记录,则拒绝新对象
  2. 拒绝批量保存具有相同“X”值的两个对象

看起来 (1.) 工作正常,但 (2.) 不是。这是意料之中的吗(可能是因为 ActiveRecord 唯一性验证是在数据库“外部”执行的),如果是,除了在导入新数据之前手动验证之外,是否有简单的方法来处理这个问题?

【问题讨论】:

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


    【解决方案1】:

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

    因此,无论何时尝试保存重复项,您都可以拥有一个通过on_duplicate_key_update 更新的标志类型列。或者您必须手动进行这一验证

    编辑 答案可能不正确,具体请参考OP的cmets。

    【讨论】:

    • 如上所述,示例 (1) 运行良好——因此它似乎支持某种唯一性验证——但 (2) 不支持。
    • 似乎 (2) 中的行为是预期的,因为 import 方法只是在每个对象上调用 valid?,在保存之前它们彼此不知道(因此唯一性验证不会失败)
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多