سؤال

بعد إعداد علاقتي المتعددة الأشكال مثل:

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 مراجعات للنبيذ وآخر 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