On Thursday, March 7, 2013 9:34:17 PM UTC, [email protected] wrote:
>
> I have a model, resource, which has_many categories:
>
>     has_many :category_resources, :dependent => :destroy
>     has_many :categories, :through => :category_resources
>
> I have it setup to filter on categories, for a list view:
> records = 
> Resource.includes(:categories).where("category_resources.category_id" => 
> categories)
>
>
This use of includes combined with the condition makes rails use a join to 
do the include, but, as you've found the filtering then filters the 
included rows, since everything is done with a single query. I'd try 
something like

    Resource.joins(:category_resources).where("category_resources.category_id" 
=> categories).preload(:categories)

assuming that you want the proloading for performance reasons. This splits 
out the eager loading stuff from the main query.

Fred


 

> But I want it to still show all categories  for a particular resource the 
> listing, rather than just what was searched on.
>
> eg, a resource, apple, has the categories, Food, Fruit, and Red.
>
> If you select the resource Food, it should show:
> Name: Apple
> Categories: [Food, Fruit, Red]
>
> Instead, I'm just getting:
> Name: Apple
> Categories: [Food]
>
> What would be the best way to structure my query for this to work?
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/Lnbom0OMNiMJ.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to