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!
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ć.
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.
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