当无法销毁特定模型时,我要做的是返回错误而不是异常。目前,它会引发ActiveRecord::DeleteRestrictionError
,但不会返回到 flash 消息,也不会添加到模型的错误集合中。
我所做的是在我足智多谋的控制器中进行设置:
def destroy
begin
resource.destroy
rescue ActiveRecord::DeleteRestrictionError => e
resource.errors.add(:base, e)
end
end
我宁愿不在每个需要这种特殊行为的控制器中管理它。我该如何抽象它?我看不出覆盖 destroy 方法是个好主意ActiveRecord::Base
,但也许不会有任何陷阱?
我正在使用inherited_resources gem,所以也许有办法通过扩展来回答这个问题?
我的另一个想法是扩展ActiveRecord::Base
使用ActiveSupport::Concern
(从这里:Rails 扩展 ActiveRecord::Base),然后在模型到模型的基础上将销毁方法委托给自定义销毁。想法?