Rails - объединить две таблицы с одинаковой структурой - PullRequest
0 голосов
/ 26 июня 2018

В моей модели у меня есть две таблицы с одинаковой структурой:

League1
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  24/06/2018       1
2   xxxxxxxxxxxxx  26/06/2018       1

и

League2
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  23/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1

Мой контроллер делает что-то вроде этого:

league1 = League1.where(main_page: 1)
leageu2 = League2.where(main_page : 1)

Как я могу смешать (добавить, объединить или любое другое английское слово для этого) записи из обеих лиг в один объект, чтобы впоследствии я мог упорядочить его по match_starts_at?

Примерно так:

@leagues = league1 + league2
@leagues.order(match_starts_at: :desc)

Но это приводит к ошибке: undefined method 'order' for #<Array:0x007f0338c02898>

И мой желаемый результат - это (отсортировано по match_starts_by):

League2
id  other_columns  match_starts_at  main_page
----------------------------------------------
1   xxxxxxxxxxxxx  23/06/2018       1
1   xxxxxxxxxxxxx  24/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1
2   xxxxxxxxxxxxx  25/06/2018       1

А потом я разбил его на страницы и отправил на мой взгляд.

1 Ответ

0 голосов
/ 27 июня 2018

Теперь я могу ответить на свой вопрос.

Мне не удалось объединить эти два ActiveRecord::Relation объекта в один, но оказалось, что наличие Array на выходе также было достаточно здесь.

Что я сделал:

league1 = League1.where(main_page: 1) #ActiveRecord::Relation
leageu2 = League2.where(main_page : 1) #ActiveRecord::Relation

@leagues = league1 + league2 #which returns Array

@league = @league.sort_by { |r| r.match_starts_at }.reverse #sorting a normal array

@league = Kaminari.paginate_array(@league).page(params[:page]).per(10) # it turned out Kaminari can also paginate Array using #paginate_array
...