用Rails枚举覆盖爆炸方法

时间:2017-10-28 16:18:44

标签: ruby-on-rails enums

我在模型中使用枚举,我想覆盖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

谢谢!

1 个答案:

答案 0 :(得分:1)

这一切都取决于你想做什么。调用super将使用update!方法更新属性,如果存在验证问题,则会抛出异常。

相反,如果验证失败,则调用self.update_attributes(status: :ok)将返回false,但不会抛出异常。

为了保持一致性,我建议使用super,但这一切都取决于您希望如何处理验证问题。

注意:这是基于对Rails 5.1 enum source code的审核,并已在Rails 5.1中进行了测试。