2016-06-29 8 views
1

Ich versuche, eine Self Join-Beziehung für ein Modell namens: Subsystem. In diesem Fall repräsentiert ein Subsystem ein Java-Paket, eine Klasse oder eine Methode. Ich habe die Schienen Dokumentation zu lesen, wo ich sah ich es wie folgt verwenden:Wie erstelle ich ein Self-Join-Objekt, wenn es auch zu einem anderen Modell gehört?

class Subsystem < ActiveRecord::Base 
    has_many :child_subsystems, class_name: "Subsystem", 
          foreign_key: "parent_id" 

    belongs_to :parent, class_name: "Subsystem" 
end 

ich ein paar Beispiele auch sah, wo in den meisten Fällen die „Teil erstellen“ wird nicht beschrieben. Mein Problem ist, dass ich nach dem besten Weg suche, die Subsysteme zu erstellen, denn: Das Subsystem-Modell gehört auch zu einem Projekt. Im Moment erstelle ich Subsysteme wie:

project.subsystems.create(params) 

Ich hoffe, dieses Bild macht es sich besser zu verstehen. Ein Projekt kann 0 bis mehrere Subsysteme haben, und jedes Subsystem kann auch 0 bis mehrere Subsysteme haben.

Subsystems

Ich habe gesehen, Beispiele eine Selbst machen verbinden, wo die Menschen das Element Beziehung mit Build erstellt, aber ich bin nicht sicher, wie mit meinem vorhandenen erstellen zu kombinieren, dass: project.subsystems.create.

Kann mir jemand helfen? Danke im Voraus!

+0

Wenn Sie eine 'has_many'-Beziehung haben, wird Rails Ihnen automatisch eine Methode' build _ # {association} 'oder in Ihrem Fall' build_child_subsystems' geben – Kkulikovskis

+0

@Kkulikovskis Danke für Ihre Antwort! Ich werde einen Blick auf die Build-Assoziationsmethode werfen, um herauszufinden, wie ich sie mit meiner derzeitigen Art der Erstellung der Subsysteme kombinieren und die parent_id setzen kann! – Maikel

Antwort

0

Die Art und Weise, wie Sie Ihre Self-Join-Verknüpfung erstellt haben, ist genau richtig.

Wenn Sie ein Subsystem erstellen möchten, das zu einem Projekt gehört, können Sie project.subsystems.create(...) tun und wenn Sie ein Subsystem erstellen möchten, das zu einem Subsystem gehört, können Sie subsystem.child_subsystems.create(..) tun. Sie nennen effektiv den Namen der Assoziation, die im Modell definiert ist (pluralisiert für hat viele Assoziationen).

Der Unterschied zwischen Build- und Erstellungsmethoden besteht darin, dass Build effektiv new aufruft, während Aufrufe new und save erstellen. Wenn Sie Instanzen erstellen oder erstellen, die anderen Instanzen zugeordnet sind, wie in ihren Modellen definiert, enthalten die zurückgegebenen Objekte die Fremdschlüssel der Datensätze, aus denen sie erstellt oder erstellt werden.

+0

Danke für deine tolle und klare Antwort! – Maikel

Verwandte Themen