我有一個模型,當插入一條記錄時,需要調用一個web服務。Rails 3:取消插入after_save
如果Web服務失敗(超時或其他失敗),則它們還應該還原數據庫中的保存。
我使用after_save回調,並試圖在發生這種錯誤時引發ActiveRecord :: Rollback。
雖然它在object.save上返回false,但它不回滾事務。這樣做的正確方法是什麼?
我怎樣才能確保記錄不會被創建?
我有一個模型,當插入一條記錄時,需要調用一個web服務。Rails 3:取消插入after_save
如果Web服務失敗(超時或其他失敗),則它們還應該還原數據庫中的保存。
我使用after_save回調,並試圖在發生這種錯誤時引發ActiveRecord :: Rollback。
雖然它在object.save上返回false,但它不回滾事務。這樣做的正確方法是什麼?
我怎樣才能確保記錄不會被創建?
您是否將此包裝在活動記錄交易區塊中?
User.transaction do
User.create(:username => 'Kotori')
User.transaction(:requires_new => true) do
User.create(:username => 'Nemu')
raise ActiveRecord::Rollback
end
end
另請參見:
http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
嘗試使用before_save
,並從中返回false。
這會觸發更新以及 –
您可以檢查模型中的'id'問題。只有在插入數據庫之後,'id'纔會出現。 –