علاقة متعددة الأشكال في الاتجاه الآخر
-
22-09-2019 - |
سؤال
بعد إعداد علاقتي المتعددة الأشكال مثل:
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')
إلخ
لا تنتمي إلى StackOverflow