Rails: список записей нескольких моделей - PullRequest
1 голос
/ 12 октября 2011

Как я могу показать недавно добавленные @post и @photos в одном списке?Например:

post - LAlala (10.10.2011)
photos - [] [] [] [] (1.1.2011)
post - Bbbdsfbs (2.12.2010)
post - Lasdasdf2 (2.10.2009)

Ответы [ 2 ]

3 голосов
/ 12 октября 2011
@posts = Post.limit(20).order('created_at desc')
@photos = Photo.limit(20).order('created_at desc')
@recent_items = (@posts + @photos).sort_by(&:created_at)

<% @recent_items.each do |item| %>
  <% if item.class == "Photo" %>
    <%= image_tag item.url %>
  <% else %>
    <%= item.title %>
  <% end %>
<% end %>

В качестве альтернативы используйте group_by, чтобы сделать это следующим образом:

@recent_items = (@posts + @photos).group_by(&:created_at)

<% @recent_items.each do |date, items| %>
    Date: <%= date %>
    <% items.each do |item| %>
      Show information here.
    <% end %>
<% end >

Я бы переместил логику представления в помощника, если бы вы были для кода DRYer.

1 голос
/ 04 февраля 2013

Намного лучше сделать это с базой данных.

Я просто говорю это: полиморфизм + представления базы данных.

Создайте представление базы данных, которое содержит нужные вам столбцы из обоих Опубликовать и Фото , включая столбец " type ", содержащий название модели (оно вам необходимо для полиморфизма).Назовите это представление, например, « list_items ».Затем создайте модель с именем " ListItem ".Затем вы можете использовать эту модель, как и любую другую, разбивать ее на страницы и делать все, что вам нужно.

ListItem.order("created_at > ?", Date.yesterday).page(params[:page])

И не забудьте настроить полиморфную ассоциацию

Тем не менее, все это гораздо проще сделать с помощью драгоценного камня listable .Проверьте это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...