我有一个程序接收两个模型,一个已经存在,另一个包含我想要合并到第一个模型中的新属性。
由于程序的其他部分对新模型持有相同的引用,我不能只对现有模型进行操作。因此我做了以下事情:
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,这给了我唯一性erorr(即使它在技术上是相同的模型)。我也尝试使用重载方法,但结果相同。
背景
上述方法在关联的before_add回调中运行。我希望能够在模型上调用更新(使用嵌套关联),而不必指定嵌套模型的ID。这个更新应该合并一些关联,这就是为什么我尝试做上面的整个合并。
答案 0 :(得分:0)
您无法设置模型的id
,然后保存期望设置ID的记录,因为id
是数据库的主键。因此,您实际上正在创建一个全新的记录,因此,唯一性验证错误。因此,您需要考虑其他一些设计来实现您的需求。可能有助于知道您尝试执行的操作与deep_dup
类似,只是ActiveRecord没有定义此方法(但 Hash 确实如此)。