Рефакторинг методов валидации и обратных вызовов - PullRequest
1 голос
/ 01 июля 2011

Я использую Ruby on Rails 3.0.7, и у меня есть классы дерева, поведение которых почти одинаково (а также код в файлах модели).Все они имеют атрибуты name и description, запускают одни и те же методы проверки, и для обоих существует обратный вызов before_save, который поддерживает согласованность данных с предоставлением одинаковых функций.

Я хотел быметоды проверки рефактора и обратные вызовы в отдельном классе \ model (я думаю, что я должен найти их связанные файлы в папке \lib моего приложения).

Что мне нужно сделать, чтобысделать это?Какой код я должен добавить в свои классы и что в классе \ модели рефакторинга?

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Ну, вы могли бы просто создать суперкласс, от которого наследуются ваши три модели. Я склонен помещать абстрактный базовый класс в приложение / модели вместе с самими моделями.

# app/models/thing.rb
class Thing < ActiveRecord::Base
    # common code goes here, such as
    before_save ...
    validates_length_of :foo
end

# app/models/red_thing.rb
class RedThing < Thing
    # methods specific to RedThing go here
end

# app/models/blue_thing.rb
class BlueThing < Thing
    # methods specific to BlueThing go here
end

Если ваши Вещи имеют много различий, так что не имеет смысла группировать их таким образом, вам следует вместо этого использовать модуль, который немного сложнее.

0 голосов
/ 01 июля 2011

Направляющие рельсов имеют информацию здесь:

http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods

...