Смешивание разных моделей в одном списке в представлении - PullRequest
0 голосов
/ 19 июня 2010

У меня есть три модели: paste, snippet и tutorial.Я хочу показать самые новые из них, смешанные в одном списке, например, на странице:

<ul>
<li>Just a paste</li>
<li>The worst snippet ever (-10202343 kudos) (1 quadrillion comments)</li>
<li>Just another paste</li>
<li>Ruby on Rails tutorial (5 kudos) (2 comments)</li>
<li>Another snippet</li>
</ul>

Упорядочено по дате.Проблема в том, что я хочу смешать эти три модели в одном списке.Все модели имеют определенные атрибуты (например, snippet и tutorial имеют теги, все имеют заголовки, tutorial s и snippet s имеют репутацию, только paste имеет приватный логический (поэтому он не должен быть указан)).

Как я могу смешивать разные модели на мой взгляд?Спасибо

Ответы [ 2 ]

3 голосов
/ 20 июня 2010

Я бы решил эту проблему на уровне базы данных, представив Опубликованный элемент, а затем Опубликованный элемент указывает на вставку, фрагмент или учебник.Это решило бы создание списка элементов: просто выберите 5 последних опубликованных элементов.А из опубликованного элемента вы можете найти правильный элемент и показать его.

1 голос
/ 19 июня 2010

Захватите список "событий" или чего-либо еще в вашем контроллере

@events = Paste.find_all
@events << Snippet.find(:order => "votes", :limit => 1)
@events << Tutorial.find_all

тогда по вашему мнению

<%
    @events.each do |event|
      display_snippet(event) if event.class == Snippet
      display_tutorial(event) if event.class == Tutorial
    end   
%>

Есть несколько способов обработать часть представления, но это кажется довольно простым. В этом примере display_snippet и display_event будут вспомогательными методами, но может быть более чистым использовать партиалы.

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