假设以下模块允许将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
......(可能还有一些选项)是否已添加到模型中?
答案 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?