在视图中的一个列表中混合使用不同的模型

时间:2010-06-19 17:08:21

标签: ruby-on-rails models

我有三个模型:pastesnippettutorial。我想在一个列表中显示所有这些中最新的混合,如页面上所示:

<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>

按日期排序。问题是我想将这三个模型混合在一个列表中。所有模型都有特定的属性(例如snippettutorial都有标记,所有标题都有标题,tutorialsnippet都有标记,只有paste有标记private boolean(所以不应该列出))。

在我看来,如何将这些不同的模型混合在一起? 感谢

2 个答案:

答案 0 :(得分:3)

我会在数据库级解决这个问题,引入一个PublishedItem,然后PublishedItem指向Paste,Snippet或Tutorial。这将解决创建项目列表的问题:只需选择5个最新发布的项目。然后,您可以从已发布的项目中找到正确的项目并进行显示。

答案 1 :(得分:1)

获取控制器中“事件”或其他内容的列表

@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是辅助方法,但使用partials可能更干净。

相关问题