只是希望有人能给我解释一下…
我有一个导入模块的网站类:
站点

class Site < ActiveRecord::Base
 include TrackableChanges
 ...

在trackable_changes.rb中
我有这个密码。。
module TrackableChanges
  include ActiveSupport::Callbacks

  def self.included(base)
      # Initialize module.
      base.has_many :change_requests, :as => :model, :dependent => :destroy
      #Callbacks
      base.before_save :before_save_change_request
      base.after_save :after_save_change_request
      base.before_destroy :before_destroy_change_request

      Facility

  end
...

对设施的引用真的让我困惑(我在这里放了一个微不足道的引用…)。基本上在设施里。我有这个。。
class Facility < ActiveRecord::Base
  acts_as_citier

行为有点像这样:
module Citier
  def self.included(base)
    # When a class includes a module the module’s self.included method will be invoked.
    base.send :extend, ClassMethods
  end
end

ActiveRecord::Base.send :include, Citier

现在。。只要在我的初始模块中引用facility,它就会转到acts_as_citier gem并扩展我的site类的activerecord。我想要的是作为我的设施,但不是我的网站。
有人能帮我阻止这件事吗?包括带来这个不需要的参考的线索!?
编辑
似乎我根本无法引用类工具,除非它引入了ActiveRecord类的附加项,这些附加项是通过引用gem在工具中定义的act_as_citier
城市做到了。。。
ActiveRecord::Base.send :include, Citier

最佳答案

class Facility < ActiveRecord::Base
  #attr_accessible :name, :type, :facility_type_id, :accessibility_id, :tldc_id, :site_id, :tldc_approved

  acts_as_citier if self.to_s == 'Facility' #Protects other classes from accidently getting the AR additions

在include中添加一个条件将阻止acts_as_citier gem扩展任何引用“Facility”的类。
我假设include on my site class>在模块中运行,当它点击facility class>的引用时,它在facility.rb>中运行,facility.rb>在acts_as_citier中运行,然后点击extend to active record行。它帮助我记住.rb文件的每个部分都是可执行的。

10-06 10:13