0

before_validation在现代版本的 ActiveRecord 中,您可以使用简单的声明定义任意数量的处理程序:

class MyModel < ActiveRecord::Base
  before_validation :do_something
  before_validation :do_something_else
end

使用 Sequel 看起来你可以做到这一点的唯一方法类似于旧的 ActiveRecord 方法:

class MyModel < Sequel::Model
  def before_validation
    super

    do_something
    do_something_else
  end
end

是否有添加简化声明的插件,或者就是这样?Sequel 文档并没有描绘出非常清晰的画面。没有MyModel.before_validation定义类方法。

更新:正如下面的答案所示,默认情况下不存在此行为。我制作了一个 Sequel::Model 插件来解决这个问题,称为sequel_simple_callbacks

4

2 回答 2

1

看起来 Sequel 有一个插件,validation_class_methods它提供了一个基于类方法的接口来添加验证。根据验证文档,它仅用于旧版兼容性,但如果您更喜欢该接口,使用它应该没问题。

于 2010-08-25T14:51:06.727 回答
1

正如 Brian Campbell 提到的,您可以使用该validation_class_methods插件。不推荐,但支持。该validation_helpers插件为您提供与插件提供的类似帮助器,validation_class_methods用作方法内的实例方法validate

将验证作为实例方法编写是一种更好的方法,IMO,这就是 Sequel 鼓励它的原因。验证本质上是实例级别的活动,而不是类级别的活动。对于类级别的验证,处理条件验证之类的事情必须具有特殊的语法(如:if=>proc{}),您可以在实例方法中使用普通的条件 ruby​​ 语句(如ifelsecase等)。

显然,如果您来自 ActiveRecord,这是一种不同的方法。Sequel 不会尝试复制 ActiveRecord 的行为,尽管这两个库在某些方面的操作相似。

于 2010-08-25T18:51:40.343 回答