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>
你可能会发现这个答案有用,也读过评论的答案http://stackoverflow.com/questions/20824470/adding-scope-to-activerecord-causes-hierarchy-error – jamesc
不确定适用于这种情况。由于这是一个插件,我不能直接在模型中包含这些问题。我使用的是Rails指南推荐的相同格式,你可以在这里看到(http://guides.rubyonrails.org/plugins.html#add-an-instance-method)。他们正在使用插件内部的关注点,并且似乎在他们的情况下工作正常。 – nullnullnull
决定看看[回形针](https://github.com/airblade/paper_trail/blob/master/lib/paper_trail/has_paper_trail.rb)是如何处理的。他们没有使用问题,而是包含'has_paper_trail'函数中的所有关联和回调。跟随我的插件,一切正常。 – nullnullnull