【问题标题】:Saving record fails due to uniqueness conflict with itself?由于与自身的唯一性冲突,保存记录失败?
【发布时间】:2014-05-26 14:14:29
【问题描述】:

我有一个接收两个模型的过程,一个已经存在,另一个包含我想在第一个中合并的新属性。

由于程序的其他部分对新模型具有相同的引用,因此我不能只对现有模型进行操作。为此,我做了以下事情:

def merge(new_model, existing_model)
    new_model.attributes = existing_model.attributes.merge(new_model.attributes)
    new_model.id = existing_model.id
end

现在 new_model 正在被保存,这给了我唯一性错误(即使它在技术上是相同的模型)。我也尝试使用 reload 方法,但结果相同。

背景:

上述方法在关联的 before_add 回调中运行。我希望能够在模型(具有嵌套关联)上调用更新,而不必指定嵌套模型的 ID。这个更新应该合并一些关联,这就是为什么我尝试做上面的整个合并。

【问题讨论】:

    标签: ruby-on-rails validation ruby-on-rails-4


    【解决方案1】:

    您不能设置模型的id,然后保存期望设置id 的记录,因为id 是数据库的主键。所以你实际上是在创建一个全新的记录,因此,唯一性验证错误。所以你需要考虑一些其他的设计来完成你想要的。知道您尝试执行的操作听起来类似于 deep_dup 可能会有所帮助,除了 ActiveRecord 没有定义此方法(但 Hash 有)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2017-02-11
      • 2015-04-10
      • 2018-08-30
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      相关资源
      最近更新 更多