Scalanie dwóch tablic ActiveRecord i order poprzez utworzenie w

books = Book.find(:all)
articles = Articles.find(:all)

Czytając z http://guides.rubyonrails.org/layouts_and_rendering.html Wiedziałem, że mogę zrobić coś takiego:

<%= render :partial => [customer1, employee1, customer2, employee2] %>

I używałby odpowiednio części _customer i _employee.

Więc chcę zrobić coś takiego:

materials = books + articles
materials.sort_by_created_at

I w widoku:

<%= render :partial => materials %>

Jak połączyć i sortować dwie tablice ActiveRecord???Dzięki za pomoc!

Author: PeterWong, 2010-08-29

2 answers

Jesteś bardzo blisko. Łączenie tablic odbywa się za pomocą znaku plus:

materials = books + articles

Sortowanie połączonej tablicy można wykonać przez wywołanie metody sort_by (mieszanej z Enumerable) i przekazanie atrybutu prefiksu &:

materials.sort_by(&:created_at)

To nie będzie dobre pod względem wydajności dla dużych zestawów wyników. Możesz rozważyć wyprowadzenie modeli Książki I artykułu z klasy nadrzędnej (jak materiał), jeśli są podobne, używając Sti (dziedziczenie pojedynczej tabeli) do przechowywania ich w tę samą tabelę i używając find z klauzulą order, aby baza danych mogła za Ciebie sortować.

 72
Author: zetetic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 19:30:53

Można również użyć Array#concat do scalenia dwóch tablic.

 6
Author: ryancheung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-24 05:50:06