レコード セットに対して 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
これは機能しますが、ダック型の原則に反するため、型をチェックするのは間違っているように感じます。同じことを行うには、これよりも良い方法があると思います。
この同じ目標を達成するためのより良い設計は何ですか、それとも私は自分の設計を考えすぎているのでしょうか?