我試圖防止從數據庫中刪除模型,並且幾乎遵循這個guide(請參閱9.2.5.3在before_destroy中練習你的偏執狂)。Rails before_destroy回調數據庫變化總是回滾
我有一個簡單的模型:
class User < ActiveRecord::Base
before_destroy do
update_attribute(:deleted_at, Time.current)
false
end
,並在控制器:
def destroy
@user = User.find(params[:id])
# @user.update!(deleted_at: Time.zone.now) # if I do it here it works
@user.destroy # if I also comment this line...
render :show
end
回調函數被調用和屬性被設置,但隨後的數據庫事務總是被回滾。我遺漏了返回的false
模型被刪除,因爲刪除的執行沒有停止。
正如你可以在評論中看到的,我可以使它工作,但是我真正想要做的是使用服務對象並將邏輯放在控制器之外。
我猜想* false *是原因。感謝您的確認。奇怪的是,這是在一本書中提出的。我會走你提出的路線。謝謝。 – einSelbst 2014-11-04 20:47:19