只是希望有人能给我解释一下…
我有一个导入模块的网站类:
站点
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文件的每个部分都是可执行的。