2012-02-05 2 views
1

В моем приложении у меня есть модель, которая должна включать модуль. Модель имеет атрибут «формат», который определяет, какой модуль должен быть включен. Например, если format == 0, то модель должна include SingleElimination, тогда как если format == 1, тогда модель должна include DoubleElmination. Каков наилучший способ сделать это?Динамически включать модуль в ActiveRecord

ответ

1
def include_format 
    case format 
    when 1 
    extend SingleElimination 
    when 2 
    extend DoubleElmination 
    end 
end 

after_initialize :include_format 
+0

У меня возникли вопросы: почему используется расширение? – Max

+0

@Max Я использую 'extend', потому что' include' не определен в контексте тела метода. Таким образом, принятый ответ вызовет 'MethodNotDefined'. Кроме того, 'include', как описано в этом ответе, работает таким образом, когда вызывается в классе класса. Это, однако, другой контекст, тогда в теле метода, где 'extend' добавляет его туда, куда он должен идти. –

+0

Я вижу, спасибо за понимание. Я не знал об этом различии при расширении. Однако ваша реализация неверна. Вы не можете вызывать формат в фильтре after_initialize. Я получаю слишком мало аргументов. Чтобы исправить это, мне пришлось использовать лямбду. Я редактировал то, что сработало для меня. – Max

Смежные вопросы