Являются ли проверки Sequel :: Model только методами экземпляра? - PullRequest
0 голосов
/ 25 августа 2010

В современных версиях ActiveRecord вы можете определить любое количество обработчиков before_validation, используя простое объявление:

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

Есть ли плагин, который добавляет упрощенные декларации, или это просто так? Документация сиквела не дает четкой картины. Не определен MyModel.before_validation метод класса.

Обновление: Как показывают ответы ниже, это поведение по умолчанию отсутствует. Я сделал плагин Sequel :: Model, который исправляет это и называется sequel_simple_callbacks

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Как упоминал Брайан Кэмпбелл, вы можете использовать плагин validation_class_methods. Это не рекомендуется, но поддерживается. Плагин validation_helpers предоставляет вам аналогичных помощников, которые дает плагин validation_class_methods, для использования в качестве методов экземпляра внутри метода validate.

Написание проверок как методов экземпляров - лучший подход, IMO, поэтому Sequel поощряет его. Валидации по своей сути являются действиями уровня экземпляра, а не действиями класса. При валидации на уровне класса обработка таких вещей, как условная валидация, должна иметь специальный синтаксис (например, :if=>proc{}), где вы можете просто использовать обычные условные операторы ruby ​​в методе экземпляра (например, if, else, case и т. д.).

Очевидно, что если вы пришли из ActiveRecord, это другой подход. Сиквел не пытается клонировать поведение ActiveRecord, хотя в некоторых отношениях две библиотеки работают одинаково.

1 голос
/ 25 августа 2010

Похоже, что в Sequel есть плагин validation_class_methods, который обеспечивает интерфейс на основе метода класса для добавления проверок. В соответствии с проверочной документацией она предназначена только для устаревшей совместимости, но если вы предпочитаете этот интерфейс, ее можно использовать.

...