2016-06-30 7 views
0

Ich habe Modelle, die mit has_many through verknüpft sind. Ich bin in der Lage, eine Beziehung in eine Richtung, aber nicht die andere zu bekommen (es gibt keine Einstellung)Abrufen von ActiveRecord-Verknüpfungen orders_to bis

Projects have_many Datensätze durch taskflows. Taskflows sind in einer Join-Tabelle mit datasets verknüpft.

Ich kann Project.datasets einfach mit der has_many through Einstellung tun. Ich möchte auch dataset.project aufrufen, um das zugehörige Projekt von dataset (über taskflow) zu erhalten.

Ist das möglich? Vielen Dank für jede Hilfe.

Ich habe vier Modelle (Ich habe die Delegierten Einstellung versucht, aber es scheint nicht zu funktionieren):

class Project < ActiveRecord::Base 
    validates :title, presence: true, length: {minimum: 3} 
    has_many :taskflows 
    has_many :datasets, :through => :taskflows 
end 

class Taskflow < ActiveRecord::Base 
    belongs_to :project 
    has_many :dataset_assignments 
    has_many :datasets, :through => :dataset_assignments 
end 

class Dataset < ActiveRecord::Base 
    has_many :dataset_assignments 
    has_many :taskflows, :through => :dataset_assignments 
    delegate :project, :to => :taskflows, :has_nil =>true 
end 

class DatasetAssignment < ActiveRecord::Base 
    belongs_to :dataset 
    belongs_to :taskflow 
end 

Antwort

1

has_many_through funktioniert in beiden Richtungen.

Wenn Sie die has_many_through in Ihrem Datensatzmodell in umgekehrter Reihenfolge setzen, sollte es wie gewünscht funktionieren.

Ein gutes Beispiel verwende ich - und ich lernte auf

  1. Rezept Modell
  2. Ingredient Modell
  3. Component Model

Ein Rezept viele Zutaten durch Komponenten eine Zutat hat viele Rezepte durch Komponenten.

In meiner begrenzten Erfahrung macht Ihre Logik Sinn, die has_many durch fließt normalerweise "one way" in Bezug auf die Schaffung, aber in Bezug auf Schienen ist es die gleiche Beziehungstyp - eine Zutat "has_many" Rezepte durch die Komponenten