2011-07-11 9 views
1

2つの異なるオブジェクトを表す1つのモデルを作成できますか? 例:2 Railsで1モデルのユーザー定義クラス

私はブログを持っています。純粋なテキストとスクリーンキャストの記事をビデオのみで公開します。私は唯一のすべての記事=>@posts = Posts.all
私が唯一、すべてのスクリーンキャスト=>@posts = Screencasts.all
を取得したいと私はすべての記事=> を取得したいを取得したい

:念頭に置いて


と私はウィッヒクラスを知りたいビューには

<% if @posts.first is article %> 
    do something 
<% else %> 
    do something else 
<% end %> 
このポストであります

これができない場合は、どうすればいいですか?

答えて

4

これを達成するために単一テーブル継承を使用できますが、それが最良の解決策であるかどうかはわかりません。

通常の列を持つポストモデルがあります。本文、テキスト、screencast_urlなど、あなたのスクリーンキャストに似ています。今や、 "タイプ"列を文字列として追加することによって、魔法が発生します。 Railsはこれを継承したモデルを追跡するために使用します。

これで、両方のモデルを投稿から継承することができます。

class Post < ActiveRecord::Base 
end 

class Screencast < Post 
end 

class Article < Post 
end 

あなたのコード例は、あなたが望むように動作するはずです。

<% @posts.each do |post| %> 
    <% if post.class == Article %> 
    do something 
    <% elsif post.class == Screencast %> 
    do something else 
    <% end %> 
<% end %> 
:あなたはあなたのループは、このようなものになる可能性があり、この Rails API page

にSTIに関する詳細な情報を見つけることができます

関連する問題