Sequel :: Model验证只是实例方法吗?

时间:2010-08-25 14:43:07

标签: ruby-on-rails ruby sequel

在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

的插件

2 个答案:

答案 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的行为,尽管这两个库在某些方面的运作方式相似。