我在模型中使用枚举,我想覆盖bang方法,例如:
val tree: Tree = new Tree
val tt: Tree#Tree = tree.buildTree(...)
测试一下,它运行正常。有没有潜在的陷阱?
或者,完全跳过超级是否更好/更清洁:
class Foo < Application Record
enum status: [:ok, :error]
def ok!
self.error_message = nil
super
end
end
谢谢!
答案 0 :(得分:1)
这一切都取决于你想做什么。调用super
将使用update!
方法更新属性,如果存在验证问题,则会抛出异常。
相反,如果验证失败,则调用self.update_attributes(status: :ok)
将返回false
,但不会抛出异常。
为了保持一致性,我建议使用super
,但这一切都取决于您希望如何处理验证问题。
注意:这是基于对Rails 5.1 enum source code的审核,并已在Rails 5.1中进行了测试。