0

レコード セットに対して 1 つのクエリを実行し、多くの型オブジェクトのリストを取得する必要があります。

この例では、ブログ投稿にさまざまな種類があるブログ投稿を使用します。

ベースポスト:

class Post < ActiveRecord::Base
  belongs_to :postable, :polymorphic => true
  attr_accessible :body, :title
end

音声投稿:

class AudioPost < ActiveRecord::Base
  attr_accessible :sound
  has_one :postable, :as => :postable
end

グラフィック投稿:

class GraphicPost < ActiveRecord::Base
  attr_accessible :image
  has_one :postable, :as => :postable
end

これにより、このようなことができるようになります。

@post = Post.all
@post.each do |post|
  post.title
  post.body
  post.postable.image if post.postable_type == "GraphicPost"
  post.postable.sound if post.postable_type == "AudioPost" 
end

これは機能しますが、ダック型の原則に反するため、型をチェックするのは間違っているように感じます。同じことを行うには、これよりも良い方法があると思います。

この同じ目標を達成するためのより良い設計は何ですか、それとも私は自分の設計を考えすぎているのでしょうか?

4

1 に答える 1