Einfaches Klonen von active_record-Objekten einschließlich Assoziationen und mehreren Operationen unter Assoziationen und Attributen.
Siehe hier.
Ziel war es, ActiveRecord-Objekte einschließlich ihrer untergeordneten Objekte einfach und schnell reproduzieren zu können, beispielsweise durch Kopieren eines Blog-Beitrags unter Beibehaltung der zugehörigen Tags oder Kategorien.
Dieser Edelstein wird „Amöbe“ genannt, weil Amöben (kleine Lebensformen) sich gut vermehren können. Auch ihre Kinder und Enkel vermehren sich schnell und problemlos.
Ein ActiveRecord-Erweiterungs-Gem, das die Duplizierung zugeordneter untergeordneter Datensatzobjekte beim Duplizieren eines aktiven Datensatzmodells ermöglicht.
Schienen 5.2, 6.0, 6.1 kompatibel. Für Rails 4.2 bis 5.1 verwenden Sie Version 3.x.
Unterstützt die folgenden Assoziationstypen
has_many
has_one :through
has_many :through
has_and_belongs_to_many
Eine einfache DSL zur Konfiguration der zu kopierenden Felder. Das DSL kann auf Ihre Schienenmodelle angewendet oder im laufenden Betrieb verwendet werden.
Unterstützt STI-Kinder (Single Table Inheritance), die ihre übergeordneten Amoeba-Einstellungen erben.
Mehrere Konfigurationsstile wie inklusive, exklusiv und wahllos (auch bekannt als „Alles kopieren“).
Unterstützt das Klonen der untergeordneten Elemente von Many-to-Many-Datensätzen oder lediglich die Beibehaltung ursprünglicher Zuordnungen
Unterstützt automatisches Drilldown, also rekursives Kopieren von untergeordneten und Enkeldatensätzen.
Unterstützt die Vorverarbeitung von Feldern, um die Eindeutigkeit anzuzeigen und die Integrität Ihrer Daten abhängig von Ihren Geschäftslogikanforderungen sicherzustellen, z. B. durch Voranstellen von „Kopie von“ oder ähnlichem Text.
Unterstützt die Vorverarbeitung von Feldern mit benutzerdefinierten Lambda-Blöcken, sodass Sie im Grunde alles tun können, was Sie wollen, wenn Sie beispielsweise beim Erstellen von Kopien eine benutzerdefinierte Logik benötigen.
Amoeba kann die folgenden Vorverarbeitungsvorgänge für Felder kopierter Datensätze durchführen
Satz
voranstellen
anhängen
annullieren
anpassen
Regex
ist hoffentlich so, wie Sie es erwarten würden:
Gem installiert Amöbe
oder fügen Sie es einfach zu Ihrer Gemfile hinzu:
Edelstein 'Amöbe'
Konfigurieren Sie Ihre Modelle mit einem der folgenden Stile und führen Sie dann einfach die Methode amoeba_dup
auf Ihrem Modell aus, wo Sie normalerweise die Methode dup
ausführen würden:
p = Post.create(:title => „Hallo Welt!“, :content => „Lorum ipsum dolor“)p.comments.create(:content => „Ich liebe es!“)p.comments.create(: content => „Das ist scheiße!“ puts Comment.all.count # sollte 2 sein my_copy = p.amoeba_dupmy_copy.saveputs Comment.all.count # sollte 4 sein
Wenn Amoeba aktiviert ist, kopiert es standardmäßig alle zugehörigen untergeordneten Datensätze automatisch und verknüpft sie mit dem neuen übergeordneten Datensatz.
Sie können das Verhalten so konfigurieren, dass nur die von Ihnen aufgelisteten Felder oder nur die nicht ausgeschlossenen Felder einbezogen werden. Von den dreien wird der wahllose Stil am leistungsstärksten sein, gefolgt vom inklusiven Stil, und der exklusive Stil wird am langsamsten sein, da für jedes Feld eine zusätzliche explizite Prüfung erforderlich ist. Dieser Leistungsunterschied ist wahrscheinlich so vernachlässigbar, dass Sie den zu verwendenden Stil danach auswählen können, welcher am einfachsten zu lesen und zu schreiben ist. Wenn Ihr Datenbaum jedoch groß genug ist und Sie Kontrolle darüber benötigen, welche Felder kopiert werden, ist der inklusive Stil wahrscheinlich besser Wahl als exklusiver Stil.
Bitte beachten Sie, dass es sich bei diesen Beispielen nur um grobe Annäherungen an Szenarien aus der realen Welt handelt und sie möglicherweise nicht besonders realistisch sind. Sie dienen lediglich der Demonstration der Funktionsnutzung.
Dies ist der einfachste Anwendungsfall und ermöglicht lediglich das Kopieren aller bekannten Zuordnungen.
Wenn Sie einige Modelle für einen Blog wie diesen haben:
Klasse Post < ActiveRecord::Base has_many :commentsendclass Kommentar < ActiveRecord::Base gehört_zu :postend
Fügen Sie einfach den Amoeba-Konfigurationsblock zu Ihrem Modell hinzu und rufen Sie die Methode „enable“ auf, um das Kopieren untergeordneter Datensätze wie folgt zu aktivieren:
Klasse Post < ActiveRecord::Base has_many :Kommentare Amöbe machbar endclass Kommentar < ActiveRecord::Base gehört_zu :postend
Untergeordnete Datensätze werden automatisch kopiert, wenn Sie die Methode amoeba_dup
ausführen.
Wenn Sie möchten, dass nur einige der Assoziationen kopiert werden, andere jedoch nicht, können Sie den inklusiven Stil verwenden:
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags has_many :Autoren amoeba doenableinclude_association :tagsinclude_association :authors endclass Kommentar < ActiveRecord::Base gehört_zu :postend
Die Verwendung des Inclusive-Stils innerhalb des Amoeba-Blocks impliziert tatsächlich, dass Sie Amoeba aktivieren möchten. Es besteht also keine Notwendigkeit, die Enable-Methode auszuführen, obwohl dies auch nicht schaden wird:
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags has_many :Autoren Amoeba doinclude_association :tagsinclude_association :authors endclass Kommentar < ActiveRecord::Base gehört_zu :postend
Sie können die zu kopierenden Felder auch durch Übergabe eines Arrays angeben. Wenn Sie include_association
mit einem einzelnen Wert aufrufen, wird dieser an die Liste der bereits enthaltenen Felder angehängt. Wenn Sie ein Array übergeben, überschreibt Ihr Array die ursprünglichen Werte.
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags has_many :Autoren Amöbe doinclude_association [:tags, :authors] endclass Kommentar < ActiveRecord::Base gehört_zu :postend
In diesen Beispielen werden die Tags und Autoren des Beitrags kopiert, nicht jedoch seine Kommentare.
Wenn der inklusive Stil verwendet wird, werden alle anderen Stile, die zuvor ausgewählt wurden, automatisch deaktiviert.
Wenn Sie mehr Felder einschließen als ausschließen müssen, möchten Sie möglicherweise den Schreib- und Leseaufwand verkürzen, indem Sie den exklusiven Stil verwenden. Alle Felder, die nicht explizit ausgeschlossen sind, werden kopiert:
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags has_many :Autoren Amöbe doexclude_association :comments endclass Kommentar < ActiveRecord::Base gehört_zu :postend
Dieses Beispiel macht dasselbe wie das Beispiel für den inklusiven Stil: Es kopiert die Tags und Autoren des Beitrags, nicht jedoch seine Kommentare. Wie beim inklusiven Stil besteht keine Notwendigkeit, Amoeba explizit zu aktivieren, wenn auszuschließende Felder angegeben werden.
Der exklusive Stil deaktiviert bei Verwendung automatisch alle anderen Stile, die zuvor ausgewählt wurden. Wenn Sie also Einschlussfelder und anschließend einige Ausschlussfelder ausgewählt haben, deaktiviert die Methode exclude_association
den zuvor ausgewählten Einschlussstil und löscht alle entsprechenden Einschlussfelder .
Wenn Sie eine zusätzliche Bedingung für die Einschluss- oder Ausschlussbeziehung angeben müssen, können Sie den Methodennamen auch auf die Option :if
“ übertragen.
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags Amoeba doinclude_association :comments, if: :popular? Ende Auf jeden Fall beliebt?Likes > 15 enden
Nach dem Aufruf Post.first.amoeba_dup
werden alle Kommentare ebenfalls dupliziert, wenn likes
größer als 15 sind. In einer anderen Situation werden jedoch keine Beziehungen geklont. Das gleiche Verhalten gilt für exclude_association
.
Seien Sie sich bewusst ! Wenn Sie geschrieben haben:
Klasse Post < ActiveRecord::Base has_many :Kommentare has_many :tags Amoeba doexclude_association :tagsinclude_association :comments, wenn: :popular? Ende Auf jeden Fall beliebt?Likes > 15 enden
Wird die Inklusionsstrategie unabhängig vom Ergebnis der popular?
Methodenaufruf (dasselbe gilt für die umgekehrte Situation).
Wenn Sie eine Viele-zu-Viele-Beziehung verwenden, können Sie Amoeba anweisen, tatsächlich Duplikate der ursprünglichen zugehörigen Datensätze zu erstellen, anstatt lediglich die Verknüpfung mit den Originaldatensätzen aufrechtzuerhalten. Das Klonen ist einfach. Sagen Sie Amoeba einfach, welche Felder geklont werden sollen, genauso wie Sie ihm mitteilen, welche Felder ein- oder ausgeschlossen werden sollen.
Klasse Post < ActiveRecord::Base has_and_belongs_to_many :warnungen has_many :post_widgets has_many :widgets, :through => :post_widgets Amoeba doenableclone [:widgets,:warnungen] endclass Warnung < ActiveRecord::Base has_and_belongs_to_many :postsendclass PostWidget < ActiveRecord::Base gehört_zu:Widget gehört_zu :postendclass Widget < ActiveRecord::Base has_many :post_widgets has_many :posts, :through => :post_widgetsend
In diesem Beispiel werden die Warnungen und Widgets tatsächlich in der Datenbank dupliziert. Wenn ursprünglich drei Warnungen in der Datenbank vorhanden waren, werden beim Duplizieren eines Beitrags am Ende sechs Warnungen in der Datenbank angezeigt. Dies steht im Gegensatz zum Standardverhalten, bei dem Ihr neuer Beitrag lediglich erneut mit zuvor vorhandenen Warnungen verknüpft wird und diese Warnungen selbst nicht dupliziert werden.
Standardmäßig erkennt Amoeba alle untergeordneten Elemente der folgenden Assoziationstypen und versucht, sie zu kopieren:
hat eins
hat viele
hat und gehört vielen
Sie können steuern, auf welche Assoziationstypen sich Amoeba anwendet, indem Sie die recognize
im Amoeba-Konfigurationsblock verwenden.
Klasse Post < ActiveRecord::Base has_one :config has_many :Kommentare has_and_belongs_to_many :tags Amöbe erkennt [:has_one, :has_and_belongs_to_many] endclass Kommentar < ActiveRecord::Base gehört_zu :postendclass Tag < ActiveRecord::Base has_and_belongs_to_many :postsend
In diesem Beispiel werden die Konfigurationsdaten des Beitrags kopiert und die mit dem neuen Beitrag verknüpften Tags beibehalten, die Kommentare des Beitrags werden jedoch nicht kopiert, da Amoeba nur untergeordnete Elemente der Assoziationen has_one
und has_and_belongs_to_many
erkennt und kopiert und in diesem Beispiel Kommentare keine has_and_belongs_to_many
-Zuordnung sind.
Wenn Sie verhindern möchten, dass ein reguläres Feld (das nicht auf has_*
Assoziation basiert) seinen Wert beim Kopieren beibehält, können Sie das Feld wie folgt „auf Null setzen“ oder „annullieren“:
Klasse Topic < ActiveRecord::Base has_many :postsendclass Beitrag < ActiveRecord::Base gehört_zu :topic has_many :Kommentare Amoeba doenablenullify :date_publishednullify :topic_id endclass Kommentar < ActiveRecord::Base gehört_zu :postend
In diesem Beispiel werden alle Kommentare eines Beitrags kopiert. Außerdem wird dadurch das Veröffentlichungsdatum ungültig und der Beitrag von seinem ursprünglichen Thema getrennt.
Im Gegensatz zu inklusiven und exklusiven Stilen ermöglicht die Angabe von Nullfeldern nicht automatisch, dass Amoeba alle untergeordneten Datensätze kopiert. Wie bei jedem aktiven Datensatzobjekt wird der Standardfeldwert anstelle von nil
verwendet, wenn bei der Migration ein Standardwert vorhanden ist.
Wenn Sie ein Feld einfach auf einen beliebigen Wert für alle duplizierten Objekte setzen möchten, können Sie die set
-Direktive verwenden. Wenn Sie beispielsweise ein Objekt kopieren möchten, mit dem ein Genehmigungsprozess verknüpft ist, möchten Sie wahrscheinlich den Status des neuen Objekts wieder auf „Offen“ oder „In Bearbeitung“ setzen.
Klasse Post < ActiveRecord::Base Amöbe doset :state_tracker => "open_for_editing" enden
Wenn in diesem Beispiel ein Beitrag dupliziert wird, erhält sein Feld state_tracker
zum Starten immer den Wert open_for_editing
.
Sie können während der Kopierphase eine Zeichenfolge am Anfang des Felds eines kopierten Objekts hinzufügen:
Klasse Post < ActiveRecord::Base Amoeba doenableprepend :title => „Kopie von“ enden
Sie können während der Kopierphase eine Zeichenfolge am Ende des Felds eines kopierten Objekts hinzufügen:
Klasse Post < ActiveRecord::Base Amoeba doenableappend :title => „Kopie von“ enden
Sie können während der Kopierphase eine Such- und Ersetzungsabfrage für das Feld eines kopierten Objekts ausführen:
Klasse Post < ActiveRecord::Base Amoeba doenableregex :contents => {:replace => /dog/, :with => 'cat'} enden
Sie können eine oder mehrere benutzerdefinierte Methoden ausführen, um grundsätzlich alles zu tun, was Sie möchten. Übergeben Sie einfach einen Lambda-Block oder ein Array von Lambda-Blöcken an die Anweisung customize
. Jeder Block muss die gleiche Form haben, was bedeutet, dass jeder Block zwei Parameter akzeptieren muss, das Originalobjekt und das neu kopierte Objekt. Sie können dann tun, was Sie wollen, etwa so:
Klasse Post < ActiveRecord::Base amoeba doprepend :title => "Hallo Welt! "customize(lambda { |original_post,new_post| if original_post.foo == "bar"new_post.baz = "qux" end})append :comments => "... weißt du was Ich sage? enden
oder dies mit einem Array:
Klasse Post < ActiveRecord::Base has_and_belongs_to_many :tags amoeba doinclude_association :tagscustomize([ lambda do |orig_obj,copy_of_obj|# gute Sachen kommen hierher, lambda do |orig_obj,copy_of_obj|# weitere gute Sachen kommen hierher, end]) enden
Zur Anpassung übergebene Lambda-Blöcke werden standardmäßig nach dem Kopieren und der Feldvorverarbeitung ausgeführt. Wenn Sie eine Methode vor einer Anpassung oder Feldvorverarbeitung ausführen möchten, können Sie den Cousin von customize
override
. Die Verwendung ist die gleiche wie oben.
Klasse Post < ActiveRecord::Base amoeba doprepend :title => "Hallo Welt! "override(lambda { |original_post,new_post| if original_post.foo == "bar"new_post.baz = "qux" end})append :comments => "... weißt du was Ich sage? enden
Sie können einen einzelnen Präprozessor auf mehrere Felder gleichzeitig anwenden.
Klasse Post < ActiveRecord::Base amoeba doenableprepend :title => „Kopie von“, :contents => „Kopierter Inhalt:“ enden
Sie können mehrere Vorverarbeitungsanweisungen gleichzeitig auf ein einzelnes Modell anwenden.
Klasse Post < ActiveRecord::Base amoeba doprepend :title => "Kopie von ", :contents => "Originalinhalt: "append :contents => " (kopierte Version)"regex :contents => {:replace => /dog/, :with => ' Katze'} enden
Dieses Beispiel sollte etwa so aussehen:
post = Post.create( :title => "Hallo Welt", :contents => „Ich mag Hunde, Hunde sind großartig.“)new_post = post.amoeba_dupnew_post.title # „Kopie von Hello world“new_post.contents # „Originalinhalt: Ich mag Katzen, Katzen sind großartig. (kopierte Version)“
Wie nullify
ermöglichen die Vorverarbeitungsanweisungen nicht automatisch das Kopieren zugehöriger untergeordneter Datensätze. Wenn nur Vorverarbeitungsanweisungen verwendet werden und Sie untergeordnete Datensätze kopieren möchten und keine Liste include_association
oder exclude_association
bereitgestellt wird, müssen Sie das Kopieren untergeordneter Datensätze dennoch explizit aktivieren, indem Sie die Methode „enable“ im Amoeba-Block Ihres Modells aufrufen.
Sie können eine Kombination von Konfigurationsmethoden innerhalb des Amoeba-Blocks jedes Modells verwenden. Anerkannte Assoziationstypen haben Vorrang vor Einschluss- oder Ausschlusslisten. Der inklusive Stil hat Vorrang vor dem exklusiven Stil, und diese beiden expliziten Stile haben Vorrang vor dem wahllosen Stil. Mit anderen Worten: Wenn Sie Felder zum Kopieren auflisten, kopiert Amoeba nur die Felder, die Sie auflisten, bzw. nur die Felder, die Sie nicht ausschließen, je nach Fall. Wenn ein Feldtyp nicht erkannt wird, wird er außerdem nicht kopiert, unabhängig davon, ob er in einer Einschlussliste erscheint. Wenn Sie möchten, dass Amoeba automatisch alle Ihre untergeordneten Datensätze kopiert, listen Sie keine Felder mit include_association
exclude_association
auf.
Die folgende Beispielsyntax ist vollkommen gültig und führt zur Verwendung des inklusiven Stils. Die Reihenfolge, in der Sie die Konfigurationsmethoden innerhalb des Amoeba-Blocks aufrufen, spielt keine Rolle:
Klasse Topic < ActiveRecord::Base has_many :postsendclass Beitrag < ActiveRecord::Base gehört_zu :topic has_many :Kommentare has_many :tags has_many :Autoren amoeba doexclude_association :authorsinclude_association :tagsnullify :date_publishedprepend :title => "Copy of "append :contents => " (kopierte Version)"regex :contents => {:replace => /dog/, :with => 'cat'}include_association :authorsenablenullify :topic_id endclass Kommentar < ActiveRecord::Base gehört_zu :postend
In diesem Beispiel werden alle Tags und Autoren eines Beitrags kopiert, nicht jedoch seine Kommentare. Außerdem wird dadurch das Veröffentlichungsdatum ungültig und der Beitrag von seinem ursprünglichen Thema getrennt. Außerdem werden die Felder des Beitrags wie im vorherigen Vorverarbeitungsbeispiel vorverarbeitet.
Beachten Sie, dass aus Prioritätsgründen der inklusive Stil verwendet wird und die Liste der Ausschlussfelder niemals herangezogen wird. Darüber hinaus ist die Methode enable
redundant, da Amoeba bei Verwendung von include_association
automatisch aktiviert wird.
Die Vorverarbeitungsanweisungen werden ausgeführt, nachdem untergeordnete Datensätze kopiert wurden, und zwar in dieser Reihenfolge.
Nullfelder
Wird vorangestellt
Anhänge
Suchen und Ersetzen
Vorverarbeitungsanweisungen haben keinen Einfluss auf Einschluss- und Ausschlusslisten.
Sie können Amoeba dazu veranlassen, die Kette so weit nach unten zu kopieren, wie Sie möchten. Fügen Sie einfach Amoeba-Blöcke zu jedem Modell hinzu, dessen untergeordnete Elemente kopiert werden sollen. Amoeba rekursiert automatisch in alle aktivierten Enkelkinder und kopiert diese ebenfalls.
Klasse Post < ActiveRecord::Base has_many :Kommentare Amöbe machbar endclass Kommentar < ActiveRecord::Base gehört_zu :post has_many :Bewertungen Amöbe machbar endclass Rating < ActiveRecord::Base gehört_zu :commentend
In diesem Beispiel kopiert Amoeba beim Kopieren eines Beitrags alle Kommentare zu einem Beitrag und auch die Bewertungen jedes Kommentars.
Die Verwendung der has_one :through
-Assoziation ist einfach. Stellen Sie jedoch sicher, dass Sie Amoeba für jedes Modell mit einer has_one
-Assoziation aktivieren, und Amoeba führt automatisch und rekursiv einen Drilldown durch, etwa so:
Klasse Lieferant < ActiveRecord::Base has_one :Konto has_one :history, :through => :account Amöbe machbar enddclass-Konto < ActiveRecord::Base gehört_zu:Lieferant has_one :history Amöbe machbar endclass History < ActiveRecord::Base gehört_zu:accountend
Das Kopieren von has_many :through
Assoziationen funktioniert automatisch. Sie führen das Kopieren auf die gleiche Weise durch wie die has_and_belongs_to_many
-Zuordnung, d. h. die eigentlichen untergeordneten Datensätze werden nicht kopiert, sondern die Zuordnungen werden einfach beibehalten. Wenn Sie möchten, können Sie dem mittleren Modell einige Feldpräprozessoren hinzufügen, dies ist jedoch nicht unbedingt erforderlich:
Klasse Assembly < ActiveRecord::Base has_many :manifestiert has_many :parts, :through => :manifests Amöbe machbar endclass Manifest < ActiveRecord::Base gehört_zu :assembly gehört_zu :part Amoeba doprepend :notes => „Kopie von“ endclass Part < ActiveRecord::Base has_many :manifestiert has_many :assemblies, :through => :manifests Amöbe machbar enden
Sie können steuern, wie Amoeba Ihr Objekt im laufenden Betrieb kopiert, indem Sie einen Konfigurationsblock an die Amoeba-Methode des Modells übergeben. Die Konfigurationsmethode ist statisch, die Konfiguration wird jedoch auf Instanzbasis angewendet.
Klasse Post < ActiveRecord::Base has_many :Kommentare Amoeba doenableprepend :title => „Kopie von“ enddclass Kommentar < ActiveRecord::Base gehört_zu:postendclass PostsController < ActionController def double_a_postold_post = Post.create( :title => "Hello world", :contents => "Lorum ipsum")old_post.class.amoeba do prepend :contents => "Hier ist eine Kopie: "endnew_post = old_post.amoeba_dupnew_post.title # sollte „Kopie von Hello world“ sein. new_post.contents # sollte „Hier ist eine Kopie: Lorum“ sein ipsum"new_post.save enden
Wenn Sie die von ActiveRecord bereitgestellte Einzeltabellenvererbung verwenden, kann es sein, dass Amoeba untergeordnete Klassen automatisch auf die gleiche Weise wie ihre übergeordneten Klassen verarbeitet. Sie müssen lediglich die propagate
-Methode innerhalb des Amoeba-Blocks der übergeordneten Klasse aufrufen und alle untergeordneten Klassen sollten auf ähnliche Weise kopieren.
create_table :products, :force => true do |t| t.string :type # Dies ist die STI-Spalte # diese gehören zu allen Produkten t.string :title t.decimal :Preis # Diese gelten nur für Hemden t.decimal :sleeve_length t.decimal :collar_size # diese sind nur für Computer t.integer :ram_size t.integer :hard_drive_sizeendclass Product < ActiveRecord::Base has_many :images has_and_belongs_to_many :categories Amöbe ist möglich, sich zu vermehren enddclass Shirt < Productendclass Computer < Productendclass ProductsController def some_methodmy_shirt = Shirt.find(1)my_shirt.amoeba_dupmy_shirt.save# Dieses Shirt sollte jetzt:# – eine eigene Kopie aller übergeordneten Bilder haben# – in den gleichen Kategorien wie das übergeordnete Hemd sein enden
Dieses Beispiel sollte alle Bilder und Abschnitte duplizieren, die mit diesem Shirt verknüpft sind, das ein untergeordnetes Element von Product ist
Standardmäßig verwendet die Weitergabe unterwürfiges Parenting, was bedeutet, dass die Konfigurationseinstellungen des übergeordneten Elements angewendet werden, aber alle untergeordneten Einstellungen, falls vorhanden, entweder zu den übergeordneten Einstellungen hinzufügen oder diese überschreiben, je nachdem, wie Sie die DSL-Methoden aufrufen.
Sie können dieses Verhalten, den sogenannten „Parenting-Stil“, ändern, um den übergeordneten Einstellungen den Vorzug zu geben oder alle untergeordneten Einstellungen zu ignorieren.
Der :relaxed
-Erziehungsstil bevorzugt übergeordnete Einstellungen.
Klasse Produkt < ActiveRecord::Base has_many :images has_and_belongs_to_many :sections Amöbe doexclude_association :imagespropagate :relaxed enddclass Shirt < Produkt include_association :images include_association: Abschnitte prepend :title => "Kopie von "end
In diesem Beispiel werden die widersprüchlichen include_association
Einstellungen des untergeordneten Elements ignoriert und die übergeordnete exclude_association
Einstellung verwendet.