1

2つの異なるオブジェクトを表す1つのモデルを作成することは可能ですか?例えば:

私はブログを持っており、その上で、純粋なテキストとビデオのみのスクリーンキャストに関する記事を公開します。

それを念頭に置いて:

すべての投稿のみを取得し@posts = Posts.all
たい=>すべてのスクリーンキャストのみを取得し@posts = Screencasts.all
たい=>そしてすべての記事のみを取得したい=>@posts = Articles.all

そして、ビューでは、この投稿がどのクラスであるかを知りたいです

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

これが不可能な場合、どうすればそのようなことができますか?

4

1 に答える 1

4

単一テーブル継承を使用してこれを実現することもできますが、それが最善の解決策かどうかはわかりません。

通常の列を持つPostモデルがあります。本文、テキスト、screencast_urlなどのスクリーンキャスト。これで、「type」列を文字列として追加することで魔法が起こります。Railsはこれを使用して、継承されたモデルを追跡します。

次に、両方のモデルにPostから継承させることができます。

class Post < ActiveRecord::Base
end

class Screencast < Post
end

class Article < Post
end

これで、コード例は希望どおりに機能するはずです。STIの詳細については、このRailsAPIページをご覧ください。

ループは次のようになります。

<% @posts.each do |post| %>
  <% if post.class == Article %>
    do something
  <% elsif post.class == Screencast %>
    do something else
  <% end %>
<% end %>
于 2011-07-11T14:41:56.567 に答える