2012-04-18 45 views
0

我有兩個模型:酒店和位置。位置屬於酒店,酒店有一個位置。我試圖創建一個單一的形式,請記住,由於依賴衝突,我不能使用嵌套窗體的dm-nested。Datamapper&Rails(dm-rails)交易

我有如下所示的代碼:

if (@hotel.save && @location.save) 
    # process 
else 
    # back to form with errors 
end 

不幸的是,@ hotel.save可能會失敗,並@ location.save可以完成(這讓我困惑,因爲我沒想到第二個條件將在運行如果第一個失敗,則阻止)。

我想在交易中包裝這些,所以我可以回滾位置保存。我似乎無法找到辦法在網上做到這一點。我正在使用dm-rails,rails 3和postgresql數據庫。謝謝。

回答

1

的常用方法中的DataMapper包數據庫操作是做這樣的事情:

@hotel.transaction do 
    @hotel.save 
    @location.save 
end 

注意@hotel是很隨意的存在;它也可能是@location甚至像Hotel這樣的型號名稱。

根據我的經驗,當您啓用異常被拋出時,此功能效果最佳。然後,如果@hotel.save失敗,它將拋出一個異常,該異常將被事務塊捕獲,導致事務回滾。當然,例外是重新評估。