在Rails中同时验证多个模型更新

时间:2014-07-16 16:58:41

标签: ruby-on-rails rails-activerecord

在rails中,您可以使用accepts_nested_attributes_for在父子关系中同时创建多个模型。但是假设您具有相同的关系,但是您希望同时更新两个模型上的字段,如果一个模型未通过验证,则可以确保其他模型也不会保存。怎么可以这样做?

def edit_multiple
  @first=First.update(first_params)
  @second=Second.update(second_params)
end

如果@first通过验证但@second没有通过验证,那么我们将会遇到一些我不想要的情况:一个模型正在更新但另一个模型没有。

2 个答案:

答案 0 :(得分:1)

那是交易的目的:

First.transaction do
  @first=First.update(first_params)
  @second=Second.update(second_params)
end

现在他们两人一起成功或失败。有关详情,请访问ActiveRecord transactions

答案 1 :(得分:0)

首先检查所有模型实例是否为@model.valid?然后执行保存而不进行验证@model.save(validate: false)

如果出现意外的异常,建议使用transaction作为巨石建议仍是个好主意