检测模型中是否存在acts_as_something行?

时间:2012-01-29 11:46:13

标签: ruby-on-rails ruby ruby-on-rails-3

假设以下模块允许将acts_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

根据最后一行,在ActiveRecord :: Base中提供acts_as_timeable类方法。因此,在调用Model.respond_to?(:acts_as_timeable) => true时,从ActiveRecord :: Base扩展的任何模型都将返回true。

如何根据以 acts_as_timeable 开头的行来检测模型是否实际上是act_as_timeable ...

class Model < ActiveRecord::Base
  acts_as_timeable
end

......(可能还有一些选项)是否已添加到模型中?

1 个答案:

答案 0 :(得分:2)

我认为最简单的方法是在模型类本身上设置此状态。

acts_as_timetable中,您可以设置一个类变量,并通过访问器公开它,如下所示:

  module ClassMethods
    def timeable?
      !!@timeable
    end

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

      # Rest of your code
    end
  end

然后您只需使用MyModel.timeable?

即可查看