在我的Rails 4應用程序中,我有一個表單將數據提交給兩個不同的模型booking.rb
和guest.rb
。每個模型都必須驗證它們各自的數據,並且只有當腳本的其餘部分繼續時兩者都有效。與find_or_create的軌道交易
我相信交易是前進的方向,事實上我在同一個應用程序中使用了一個交易。
然而,此方案是使用產生@guest實例:
@guest = Guest.find_or_create_by(:email => params[:email])
,當然還有,這條線將實際創建記錄,如果它不存在。我的理解是,如果事務真正創建,事務不會回滾?理想情況下,我需要的是這樣的:
@guest = Guest.find_or_new(:email => params[:email])
但我不認爲這是在Rails中的選項?
然後我可以繼續下去,並執行事務和回退,如果有一個驗證錯誤:
begin
@booking.transaction do
@booking.save!
@guest.save!
end
redirect_to somewhere
rescue
render :new
end
我的問題我如何可以驗證使用事務兩款車型,同時也考慮到find_or_create_by
?如果事務回滾
你使用哪種數據庫? (SQLite,PostgreSQL,...) –