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 等...

我正在努力做的是朝着另一个方向前进,即假设我想找到最后 10 条 Wine 的评论和最后 10 条 Beer 的评论。

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')

ETC

于 2009-11-25T19:34:08.093 回答