Ich versuche, ein Rails-Plugin zu erstellen. In den meisten Fällen funktioniert das, was ich geschrieben habe. Es gibt jedoch ein Problem mit Assoziationen. Wenn ich versuche, eine Verbindung zu nennen, ich diesen Fehler:ActiveRecord :: Base gehört nicht in eine Hierarchie von ActiveRecord absteigend
ActiveRecord::Base doesn't belong in a hierarchy descending from ActiveRecord
Im Moment sieht das Plugin wie folgt aus:
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
Auch hier wird die Fehlermeldung ausgelöst, wenn ich versuche, das nennen Verband. Ich verwendete Debugger im after_create
Callback und versuchte ausgeführt wird:
> 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>
Sie könnten diese Antwort nützlich finden, lesen Sie auch die Kommentare auf der Antwort http://stackoverflow.com/questions/20824470/adding-scope-to-actrecord-causes-hierarchy-error – jamesc
Nicht sicher, dass das in diesem Fall gilt . Da es sich um ein Plugin handelt, kann ich die Bedenken nicht direkt in die Modelle aufnehmen. Ich verwende das gleiche Format, das von den Rails Guides empfohlen wird, wie Sie [hier] (http://guides.rubyonrails.org/plugins.html#add-an-instance-method) sehen können. Sie verwenden Bedenken in einem Plugin und es scheint in ihrem Fall gut zu funktionieren. – nullnullnull
Entschieden, um zu sehen, wie [Büroklammer] (https://github.com/airbla/de/paper_trail/blob/master/lib/paper_trail/has_paper_trail.rb) Dinge gehandhabt hat. Anstatt ein Anliegen zu verwenden, enthalten sie alle Zuordnungen und Rückrufe innerhalb der 'has_paper_trail'-Funktion. Folgte Anzug mit meinem Plugin und alles hat gut funktioniert. – nullnullnull