已经建立了我的多态的关系像这样:

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

什么我strugling做的是去另一个方向,即可以说,我想找到葡萄酒啤酒最后的10条和最后10条。

有帮助吗?

解决方案

做到这一点,最简单的方法可能是一个名为范围添加到您的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')

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top