before_ *回调可以通过返回false来暂停执行。
我在模型上有3个before_destroy回调,以暂停销毁,原因有几种。我想告诉用户它是什么原因,但我会从模型中恢复.destroy是假的。如何从模型中发送消息,或从控制器确定before_destroy回调暂停执行?
答案 0 :(得分:1)
这是一个很好的问题。我不知道是否有一个好方法。我唯一想到的就是使用错误[:base],但这听起来有点像黑客。
答案 1 :(得分:1)
这里没有什么好的答案 - How do I 'validate' on destroy in rails。
基本上解决方案将是
errors.add_to_base "Name of the error"
OR
你可以在模型中定义attr_accessor并适当地设置它们,即使我认为这不是最干的方式,因为该对象已经有错误属性hash,它应该容纳错误。
EX是:
attr_accessor :before_save_error1
attr_accessor :before_save_error2
attr_accessor :before_save_error3
before_destroy :check_for_errors
def check_for_errors
error = false
if error1 # some condition here
self.before_save_error1 = true
error = true
elsif error2 # some condition here
self.before_save_error2 = true
error = true
elseif error3 # some condition here
self.before_save_error3 = true
error = true
end
error
end
答案 2 :(得分:0)
找到答案。使用:
errors.add:my_key,'my msg'
错误只是一个哈希,可以处理任何密钥。只需确保您的属性没有名称冲突。