I have a model with multiple taxonomies using act-as-taggable-on
class Film < ActiveRecord::Base attr_accessible :mood_list, :genre_list, :tag_list, :country_list acts_as_taggable_on :countries, :genres, :moods, :tags end
I'm trying to do a search in Ransack to find records that have some kind of mood and exactly match the country. But it reconfigures 0 entries, while I have the corresponding entry, see:
Film.search({:moods_name_in=>['happy', 'snooze']}).result.count => 2 Film.search({:countries_name_eq=>'USA'}).result.count => 2 Film.search({:moods_name_in=>['happy', 'snooze'], :countries_name_eq=>'USA'}).result.count => 0
He does not return anything !!! But I definitely have one:
>> f.countries [#<ActsAsTaggableOn::Tag id: 13, name: "USA">] >> f.moods [#<ActsAsTaggableOn::Tag id: 17, name: "active">, #<ActsAsTaggableOn::Tag id: 16, name: "psyched">, #<ActsAsTaggableOn::Tag id: 15, name: "happy">] The SQL generated is: (3.2ms) SELECT COUNT(DISTINCT "films"."id") FROM "films" LEFT OUTER JOIN "taggings" ON "taggings"."taggable_id" = "films"."id" AND taggings.context = ('moods') AND "taggings"."taggable_type" = 'Film' LEFT OUTER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" LEFT OUTER JOIN "taggings" "country_taggings_films_join" ON "country_taggings_films_join"."taggable_id" = "films"."id" AND taggings.context = ('countries') AND "country_taggings_films_join"."taggable_type" = 'Film' LEFT OUTER JOIN "tags" "countries_films" ON "countries_films"."id" = "country_taggings_films_join"."tag_id" WHERE (("tags"."name" IN ('happy', 'snooze') AND "countries_films"."name" = 'USA'))
any help please!
UPDATE: 1/11/2013 The problem should be the proper use of ransack predicates. There are several related issues that are not really resolved. Rails, Ransack: how to search for HABTM relationships for "all" instead of "any" and " "
Convert habtm ActiveRecord request to Arel
UPDATE The problem seems to be an unsolvable event for has_and_belongs_to_many https://github.com/ernie/ransack/issues/164