Ruby on rails Ruby/Rails、ActiveRecord唯一性验证和ActiveRecord导入gem

Ruby on rails Ruby/Rails、ActiveRecord唯一性验证和ActiveRecord导入gem,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,在我的RESTfulAPI中,我对ActiveRecord类中的某个数据库列“X”进行了唯一性验证,并且我使用了用于批量保存数据的。在以下两种情况下,我的应用程序都应拒绝请求: 如果数据库中存在具有相同“X”值的记录,则拒绝新对象 拒绝批量保存两个具有相同“X”值的对象 看起来(1)运转良好,但(2)并非如此。这是预期的吗(可能是因为ActiveRecord唯一性验证是在数据库“外部”执行的),如果是,除了在导入新数据之前手动验证之外,是否有简单的方法来处理此问题?ActiveRecord导入g

在我的RESTfulAPI中,我对ActiveRecord类中的某个数据库列“X”进行了唯一性验证,并且我使用了用于批量保存数据的。在以下两种情况下,我的应用程序都应拒绝请求:

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

  • 看起来(1)运转良好,但(2)并非如此。这是预期的吗(可能是因为ActiveRecord唯一性验证是在数据库“外部”执行的),如果是,除了在导入新数据之前手动验证之外,是否有简单的方法来处理此问题?

    ActiveRecord导入gem,但处理唯一性验证的方式可能不同。如果数据库支持它,则在\u duplicate\u key\u update上有一个
    ,如果发现重复的键,它将更新另一列。MySql支持它

    因此,您可以有一个标志类型列,每当试图保存重复项时,该列将通过\u duplicate\u key\u update上的
    更新。或者你必须手工进行这一验证

    编辑
    答案可能不正确,请参阅OP的注释以了解详细信息。

    如上所述,示例(1)运行良好——因此它似乎支持某种唯一性验证——但(2)不支持。似乎(2)中的行为是预期的,因为
    import
    方法只是在每个对象上调用
    valid?
    ,在保存之前彼此不了解(因此唯一性验证不会失败)