2011-07-11 43 views
1

是否可以創建一個代表兩個不同對象的模型?例如: 例如:2用於Rails中1個模型的用戶定義的類

我有一個博客,關於這個,我將發佈關於純文本和截屏視頻的文章。

考慮到這一點:

我想唯一的全帖=>@posts = Posts.all
我想唯一的全截屏=>@posts = Screencasts.all
,我想只得到所有文章=>

而且在我想知道至極類的觀點是這個職位

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

如果這是不可能的,我該怎麼做呢?

回答

4

你可以使用單表繼承來實現這一點,但我不知道這是最好的解決方案。

您將擁有一個Post模型,它具有通常的列;正文,文本和screencast_url或類似的爲您的截屏。現在,魔法也會通過將「類型」列添加爲字符串而發生。 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 %>