2 Rails中1个模型的用户定义类

时间:2011-07-11 14:31:04

标签: ruby-on-rails ruby ruby-on-rails-3 models rhtml

是否可以创建一个代表两个不同对象的模型? 例如:

  

我有一个博客,我将发布纯文本和只有视频的截屏视频。

考虑到这一点:

我想只获得所有帖子=> @posts = Posts.all
我想只获得所有的截屏视频=> @posts = Screencasts.all
我想只得到所有文章=> @posts = Articles.all

在视图中,我想知道哪个类是这篇文章

<% if @posts.first is article %>
  do something
<% else %>
  do something else
<% end %>

如果不可能,我该怎么做?

1 个答案:

答案 0 :(得分:4)

您可以使用单表继承来实现此目的,但我不确定它是最佳解决方案。

你会有一个Post模型,它有通常的列;屏幕直播的正文,文字和screencast_url或类似内容。现在通过将“type”列添加为字符串来实现神奇。 Rails将使用它来跟踪继承的模型。

然后你可以让这两个模型继承自Post。

class Post < ActiveRecord::Base
end

class Screencast < Post
end

class Article < Post
end

现在,您的代码示例应该按照您希望的方式工作。您可以在Rails API page

上找到有关STI的更多信息

你的循环可能是这样的:

<% @posts.each do |post| %>
  <% if post.class == Article %>
    do something
  <% elsif post.class == Screencast %>
    do something else
  <% end %>
<% end %>