2016-04-05 9 views
0

Ich habe diese drei Klassen:Kann ich einer Tabelle ohne Zuordnung beitreten? (Schienen/SQL)

class Factory < ActiveRecord::Base 
    has_many :machines 
end 

class Machine < ActiveRecord::Base 
    belongs_to :factory, inverse_of: :machines 
    has_many :assembly_jobs, inverse_of: :machines 
end 

class AssemblyJob < ActiveRecord::Base 
    belongs_to :machines, inverse_of: :assembly_jobs 
end 

Schema

Factories 
- id 

Machines 
- factory_id 

AssemblyJobs 
- machine_id 
- start_time 
- error_time 
- finish_time 

Ich möchte factory.rb einen Bereich schreiben sein alle Fabriken zurückzugeben, die keine Maschinen mit Montagearbeiten mit error_time haben . Ist das möglich oder muss ich dem Assembly-Job eine Spalte "factory_id" hinzufügen und eine assignes_to-Assoziation erstellen?

Antwort

1

Sie Tabellen ohne einem Verein beitreten können eine benutzerdefinierte Join-Abfrage in der joins Methode durch Eingabe:

Model.joins("<CONDITIONS FOR JOIN>") 

In Ihrem Fall sollten Sie in der Lage sein, Fabriken mit Maschinen mit Assembly zu umgrenzen Jobs die folgende Abfrage

wird zurückgegeben
Factory.joins(machines: :assembly_jobs) 

Dies erzeugt eine verschachtelte INNER JOIN, wo nur Fabriken mit einer oder mehreren Maschinen mit einem oder mehreren Montage Job zu haben.

Verwandte Themen