Jak w tytule, mam dwie zmienne query i query2. W każdej z nich mam pobrane z tej samej tabeli pewne dane (niestety, nie da się połączyć w jedno zapytanie ). I chcę to teraz paginować.
Wygląda to póki co tak:
mails = query.result.page(params[:page])
mails += query.result.page(params[:page])
Niestety, wyniki się wysypują, bo mails jest teraz Array a Kaminari tego nie lubi.
Teraz pytanie - jak inaczej mogę połączyć te dwie zmienne z ransackiem, aby przepuścić przez Kaminari?
Tak, aby Kaminari wyświetlił mi tylko jeden “pasek” z kolejnymi stronami?
Tabela mails zawiera wiadomości. Są pola user_id (zawierająca odbiorcy) oraz sender_id (zawierająca nadawcę). No i jest naturalnie title, text i inne cuda, jak data, czy wiadomość przeczytana czy nie.
Zapytanie pobiera grupując po polu thread, które zawiera interger z numerem wątku. Pobiera tytuły wątku (FIRST z PostgreSQL).
Problem z zapytaniem jest taki, że musi pobrać i te gdzie występuje gracz jako user_id i jako sender_id. Musiałem więc przygotować dwa zapytania, bo jeśli pobierze pierwszy rekord z user_id jako graczem, który zaczął rozmowę - to wtedy w polu name użytkownika wyświetli się ten, kto zaczął rozmowę. A nie adresat. Tak samo w drugą stronę.
W każdym bądź razie, zapytanie wygląda tak:
where('user_id = ? AND (removed = false OR removed_by_sender = fals e)', id).select('thread, FIRST(mails.id) as id, FIRST(title) as title, FIRST (sender_id) AS sender_id, FIRST(mails.created_at) AS created_at, bool_and(re ad) AS read, FIRST(users.name) AS name, FIRST(users.slug) AS slug').group('t hread').joins('JOIN users ON users.id = mails.sender_id').order('created_at' )
Drugie jest identyczne, ale w where zamiast user_id jest sender_id.