Объединить два запроса в один и разбить на страницы - PullRequest
2 голосов
/ 28 июня 2011

У меня есть два запроса с областями, которые нужно разбить на страницы. По отдельности они выглядят так:

a = @person.company.tasks.open.paginate :page => params[:page], :order => (sort_column + " " + sort_direction)
b = @person.tasks.private.paginate :page => params[:page], :order => (sort_column + " " + sort_direction)

Я хотел бы сделать что-то вроде следующего:

@tasks = (a + b).paginate :page => params[:page], :order => (sort_column + " " + sort_direction)

Что работает

Я успешно получаю слияние, когда я @tasks = (a + b) и результаты разбиваются на страницы.

Что не

С переменными, сложенными вместе, сортировка больше не работает.

1 Ответ

1 голос
/ 28 июня 2011

Вы можете сделать один запрос, получив задачи на основе идентификатора, возвращенного двумя запросами:

company_task_ids = @person.company.tasks.open.pluck(:id)
private_task_ids = @person.tasks.private.pluck(:id)
@tasks = Task.where(:id => (company_task_ids + private_task_ids)).paginate :page => params[:page], :order => (sort_column + " " + sort_direction)

Это может быть немного оптимизировано, но это должно помочь вам в этом

...