在ActiveRecord的现代版本中,您可以使用简单声明定义任意数量的before_validation
处理程序:
class MyModel < ActiveRecord::Base
before_validation :do_something
before_validation :do_something_else
end
使用续集看起来你可以做到这一点的唯一方法类似于旧的ActiveRecord方法:
class MyModel < Sequel::Model
def before_validation
super
do_something
do_something_else
end
end
是否有添加简化声明的插件,或者它是如何添加的?续集文档没有描绘出非常清晰的画面。没有定义MyModel.before_validation
类方法。
更新:如下面的答案所示,默认情况下不存在此行为。我制作了一个Sequel :: Model插件来修复这个名为sequel_simple_callbacks
的插件答案 0 :(得分:1)
看起来Sequel有一个插件validation_class_methods
,它提供了一个基于类方法的接口来添加验证。根据{{3}},它仅用于遗留兼容性,但如果您更喜欢该接口,则可以使用它。
答案 1 :(得分:1)
正如Brian Campbell所说,你可以使用validation_class_methods
插件。不建议这样做,但它是受支持的。 validation_helpers
插件为您提供了validation_class_methods
插件为您提供的类似帮助,用作validate
方法中的实例方法。
将验证作为实例方法编写是一种更好的方法,IMO,这就是Sequel鼓励它的原因。验证本质上是实例级活动,而不是类级活动。使用类级别验证,处理条件验证之类的事情必须具有特殊语法(如:if=>proc{}
),您可以在实例方法中使用普通的条件ruby语句(例如if
,{{1 },else
等。)
显然,如果你来自ActiveRecord,这是一种不同的方法。续集不会尝试克隆ActiveRecord的行为,尽管这两个库在某些方面的运作方式相似。