1

次のようにポリモーフィックな関係を設定しました。

class Review < ActiveRecord::Base
  belongs_to :reviewable, :polymorphic => true
  belongs_to :user
end

class Wine < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

class Beer < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

Wine.last.reviews や Beer.find(3).reviews などを実行できます...

私が苦労しているのは、別の方向に進むことです。つまり、Wine の最新の 10 件のレビューと Beer の最新の 10 件のレビューを見つけたいとしましょう。

4

1 に答える 1

3

これを行う最も簡単な方法は、おそらく、列を指定する名前付きスコープをReviewモデルに追加することです。reviewable_type

そのようです:

class Review < ActiveRecord::Base
  belongs_to :reviewable, :polymorphic => true
  belongs_to :user

  named_scope :for_wines, :conditions => { :reviewable_type => 'Wine' }
  named_scope :for_beers, :conditions => { :reviewable_type => 'Beer' }
end

そうすれば、結果を見つけるときにスコープを柔軟に設定できます...

Review.for_wines.approved.all
Review.for_beers.active.find(:all, :order => 'created_at')

于 2009-11-25T19:34:08.093 に答える