2014-07-16 75 views
0

在rails中,您可以使用accept_nested_attributes_for在父子關係中同時創建多個模型。然而,假設你有同樣的關係,但是你想同時在兩個模型上更新一個字段,如果一個模型驗證失敗,你可以確定另一個模型不會保存。這怎麼能做到?在Rails中同時驗證多個模型更新

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

如果@First通過驗證,但@second沒有,那麼我們將有一個我不希望的情況:一個模型被更新,但對方不是。

+0

這是否會一直如此?如果是這樣,你可以在兩個對象之間的關係上設置'autosave:true'。 http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html - 如果這對你來說似乎是正確的做法,如果你願意的話,我可以添加更多基於此的答案。 – pdobb

+0

不幸的是,它是具體的一個acition,我想這發生 – kempchee

回答

1

一個好主意,這是交易是:

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

現在他們都成功或失敗在一起。更多信息在ActiveRecord transactions

+0

當然,他們會,但它會結束與最壞的情況下,在最壞的情況下一半例外(沒有爆炸!在該方法調用),它不會結束與可以呈現給用戶的具有非空錯誤散列的對象。 – bbozo

0

首先檢查是否所有的模型實例是@model.valid?那麼就保存未經驗證@model.save(validate: false)

把提出了transaction如巨石仍然萬一意外發生異常