Rails 4 - Add scope to included Model -
i have association
class product has_many :categorizations has_many :categories, through: :categorization scope :first_five, lambda { limit(5) } end class category has_many :categorizations has_many :products, through: :categorization end for each category, want first 5 products using first_five scope defined above.
to minimize db request, use includes()
@categories = category.includes(:products).all but how add scope products? don't want use default_scope since affects everything.
i can't find on google (or can't right search term it)
thanks
the new syntax lambda scope in rails 4 is:
scope :first_five, -> { limit(5) } to limit 5 products in ar query, do:
@categories = category.includes(:products).merge(product.first_five).all the merge(product.first_five) going add left outer join on limited 5 products.
update:
the above code commented going limit categories. possible solution original problem add has_many...through relation calling limited_products on category model as:
has_many :limited_products, -> { limit(5) }, through: :products, source: :categorizations with categeory.includes(:limited_products) should yield expected result of limiting products 5.
as you've suggested, add source: :categorizations option newly added association limited_products. source , class_name should have been synonymous. since association defining has_many...through association ignores class_name option, should using :source option instead of :class_name option. other association options ignored in has_many...through relation :primary_key , :foreign_key.
Comments
Post a Comment