Определить, присутствует ли в акте строка act_as_something или нет? - PullRequest
0 голосов
/ 29 января 2012

Предполагается следующий модуль, который позволяет добавлять функциональные возможности activ_as_timeable к произвольной модели.

module Timeable
  module ActsAsTimeable
    extend ActiveSupport::Concern

    module ClassMethods
      def acts_as_timeable(options ={})
        ...
      end
    end
  end
end

ActiveRecord::Base.send :include, Timeable::ActsAsTimeable

Согласно последней строке, метод класса activ_as_timeable доступен в ActiveRecord :: Base. Поэтому любая модель, расширяющая форму ActiveRecord :: Base, вернет true при вызове Model.respond_to?(:acts_as_timeable) => true.

Как я могу определить, действительно ли модель act_as_timeable основана на том, является ли строка, начинающаяся с acts_as_timeable ...

class Model < ActiveRecord::Base
  acts_as_timeable
end

... (и, возможно, некоторые опции) был добавлен в модель или нет?

1 Ответ

2 голосов
/ 29 января 2012

Я думаю, что самый простой способ сделать это - установить это состояние для самого класса модели.

В acts_as_timetable вы можете установить переменную класса и выставить ее через метод доступа, например:

  module ClassMethods
    def timeable?
      !!@timeable
    end

    def acts_as_timeable(options = {})
      @timeable = true

      # Rest of your code
    end
  end

Тогда вы можете проверить просто с помощью MyModel.timeable?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...