我正在尝试创建一个Rails插件。在大部分情况下,我所编写的代码都是有效的。然而,在关联方面出现了问题。当我尝试调用一个关联时,会出现以下错误:
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>
has_paper_trail
函数中包含了所有关联和回调。我也效仿了这种做法,一切都正常工作了。 - nullnullnullscope
调用时遇到这个问题后,我只是创建了一个自定义方法。对于作用域而言,在Rails 3中它几乎等效。同样的逻辑也可能适用于关联。 - mahemoff