2014-02-03 6 views
1

У меня есть приложение rails, где пользователям назначаются проекты в качестве проекторов. Теперь я хочу показать список проектов, которым назначен пользователь. Это работает, но я также хочу сортировать его по имени клиента, а затем по имени проекта. Как я могу это сделать?Сортировка по родительскому атрибуту

Таким образом, у клиента есть проекты __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ И projectuser принадлежит как пользователю, так и проекту. Теперь я хочу сортировать по client.name и project.name. Это метод, который возвращает несортированные проекты:

class User < ActiveRecord::Base 
    def active_projects(year=nil, month=nil, day=nil) 
    self.projectusers.where("start_date <= ? and (end_date IS NULL or end_date >= ?)", Date.new(year,month,day).end_of_month, Date.new(year,month,day)) 
    end 
end 

Возможно, мне нужно включить или присоединиться к проектам и клиентам?

ответ

1

Действительно, вы должны присоединиться к проектам и клиентам:

class User < ActiveRecord::Base 
    def active_projects(year=nil, month=nil, day=nil) 
    self. 
     projectusers. 
     joins(projects: :customer). 
     where("start_date <= ? and (end_date IS NULL or end_date >= ?)", Date.new(year,month,day).end_of_month, Date.new(year,month,day)). 
     order("customers.name ASC, projects.name ASC") 
    end 
end 

Надеется, что это помогает

+0

Спасибо, это работает для проектов, потому что является прямым родителем projectuser. Но для клиента это не работает, потому что это родитель проекта вместо projectuser, поэтому уровень выше. – John

+0

О, извините, я неправильно понял ваш вопрос! Если вы хотите присоединиться к нескольким таблицам один за другим, вам просто нужно использовать хэш: 'joins (table1: {table2: table3}'. Я редактирую свой ответ. Надеюсь, это будет лучше –

+0

Да, это отлично работает, спасибо – John

Смежные вопросы