Rails在另一个方向上存在多态关系

时间:2009-11-25 18:36:34

标签: ruby-on-rails polymorphic-associations

设置了我的多态关系:

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条评论和过去10条对Beer的评论。

1 个答案:

答案 0 :(得分: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')