2014-01-26 30 views
10

我试图创建一个Rails插件。大部分是我写的作品。但是,协会存在问题。当我尝试调用关联,我得到这个错误:ActiveRecord :: Base不属于从ActiveRecord降序的层次结构

ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord 

目前,该插件看起来是这样的:

module ControlledVersioning 
    module ActsAsVersionable 
    extend ActiveSupport::Concern 

    included do 
     has_many :versions, as: :versionable 

     after_create :create_initial_version 
    end 

    module ClassMethods 
     def acts_as_versionable(options = {}) 

     cattr_accessor :versionable_attributes 
     self.versionable_attributes = options[:versionable_attributes] 
     end 
    end 

    private 
    def create_initial_version 
     version = versions.create 
    end 
    end 
end 

ActiveRecord::Base.send :include, ControlledVersioning::ActsAsVersionable 

同样,每当我试图调用被触发错误信息协会。我用调试器在after_create回调并尝试运行:

> versions.create 
*** ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord 

> versions 
*** ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord 

> Version.new 
#<Version id: nil, versionable_id: nil, versionable_type: nil> 
+0

你可能会发现这个答案有用,也读过评论的答案http://stackoverflow.com/questions/20824470/adding-scope-to-activerecord-causes-hierarchy-error – jamesc

+0

不确定适用于这种情况。由于这是一个插件,我不能直接在模型中包含这些问题。我使用的是Rails指南推荐的相同格式,你可以在这里看到(http://guides.rubyonrails.org/plugins.html#add-an-instance-method)。他们正在使用插件内部的关注点,并且似乎在他们的情况下工作正常。 – nullnullnull

+1

决定看看[回形针](https://github.com/airblade/paper_trail/blob/master/lib/paper_trail/has_paper_trail.rb)是如何处理的。他们没有使用问题,而是包含'has_paper_trail'函数中的所有关联和回调。跟随我的插件,一切正常。 – nullnullnull

回答

0

我会尝试,包括它的初始值设定不是扩展活动记录。

初始化/ acts_as_versionable.rb ActiveRecord::Base.extend(ControlledVersioning::ActsAsVersionable)

此外,在发展;或任何重新加载文件的环境,您可能会看到类似has been removed from the module tree but is still active的错误。确保你的插件文件在config.eager_load_paths中,而不是实际上在关注路径中。