2016-05-30 1 views
2

У меня возникает проблема с созданием моего .where для получения определенных значений.Ruby build. Где-то в двух классах

У меня есть эта иерархия:

-Клиент

--has_many Проекты

--- has_many Билеты

Я хочу, чтобы получить все билеты от заказчика ID как ActiveRecord: :Связь.

Моя идея была эта петля (в это клиент, от которого я хочу билеты):

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 

Я ни знаю, где писать для «ничего» в качестве таблицы аргумента, ни если это даже работает. Я бы предпочел «простой» .where, который мог бы получить все билеты.

ответ

5

Вам не нужны все эти хлопоты. У вас есть метод through, чтобы сделать это за вас.

# customer.rb 
has_many :tickets, through: projects 

# ticket.rb 
has_many :customers, through: projects 

Таким образом, вы можете сделать:

@customer.tickets 
@ticket.customers