Filter via has_many, but show all has_many objects in result

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)

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?

On 7 March 2013 21:34, [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)

Can you explain in words what you are trying to achieve with the query
above please.

Instead, I’m just getting:
Name: Apple
Categories: [Food]

If you have a Resource in resource, then resource.categories should
always show you all the categories.

Colin

On Thursday, March 7, 2013 9:34:17 PM UTC, [email protected] wrote:

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs