【发布时间】:2014-11-04 13:06:19
【问题描述】:
我试图防止从数据库中删除模型,并且几乎遵循 Rails 4 书中的guide(请参阅 9.2.5.3 使用 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 的返回,因为删除的执行没有停止,所以模型被删除了。
正如您在 cmets 中看到的,我可以让它工作,但我真正想做的是使用服务对象并将逻辑置于控制器之外。
【问题讨论】:
标签: ruby-on-rails postgresql callback rails-activerecord activemodel