Я создаю плагин и с трудом определяю фильтр before_save, который вызывает метод экземпляра, который я только что определил. Вот быстрый пример:
module ValidatesAndFormatsPhones
def self.included(base)
base.send :extend, ClassMethods
end
module ClassMethods
def validates_and_formats_phones(field_names = [:phone])
send :include, InstanceMethods
# the following variations on calls to :format_phone_fields fail
before_save send(:format_phone_fields, field_names)
before_save format_phone_fields(field_names)
before_save lambda { send(:format_phone_fields, field_names) }
# EACH OF THE ABOVE RETURNS 'undefined_method :format_phone_fields'
end
end
module InstanceMethods
def format_phone_fields(fields = [:phone], *args)
do stuff...
end
end
end
ActiveRecord::Base.send :include, ValidatesAndFormatsPhones
Полагаю, вопрос в том, как мне изменить контекст на экземпляр, а не на класс?
Я бы предпочел вызывать метод экземпляра, потому что у класса не должно быть метода с именем format_phone_fields, но экземпляр должен.
Спасибо!