2016-05-30 6 views
2

Ich bin in Schwierigkeiten beim Erstellen meiner .where, um bestimmte Werte abzurufen.Ruby Build .where über zwei Klassen

Ich habe diese Hierarchie:

-Kundenrezensionen

--has_many Projekte

--- has_many Tickets

Ich möchte alle Tickets von einem Kunden-ID als Active abzurufen: :Beziehung.

Meine Idee war, diese Schleife (c ist der Kunde, von dem ich die Karten wollen):

customer_projects = Project.where(:customer_id => c.id) 
    tickets = ActiveRecord::Relation.new(Ticket, anything) 
    customer_projects.each do |cp| 
    project_tickets = Ticket.where(:project_id => cp.id).where("DATE(created_at) >= ?", report.start_time).where("DATE(created_at) <= ?", report.end_time) 
    tickets.insert(project_tickets) 
    end 

Ich bin weder sicher, wo für „alles“ als Tabellen Argument zu schreiben, noch, ob das funktioniert auch. Ich würde eine "einfache" .where bevorzugen, die alle Tickets abrufen könnte.

Antwort

5

Sie brauchen nicht all diesen Ärger. Sie haben die through Methode, um es für Sie zu tun.

# customer.rb 
has_many :tickets, through: projects 

# ticket.rb 
has_many :customers, through: projects 

Auf diese Weise können Sie tun:

@customer.tickets 
@ticket.customers