6

I`ve使用了幾個分類模型的行爲-AS-加標籤上洗劫和行爲-AS-加標籤上的問題

class Film < ActiveRecord::Base 
    attr_accessible :mood_list, :genre_list, :tag_list, :country_list 
    acts_as_taggable_on :countries, :genres, :moods, :tags 
end 

我真的試圖讓洗劫搜索發現有任何記錄的心情,和完全匹配的國家。但它回調0記錄,而我有一個匹配的記錄,請參閱:

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 

它什麼也不返回!但我絕對有一個:

>> 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')) 

請任何幫助!

更新:2013年1月1日 問題應該在於正確應用ransack謂詞。 有幾個實際上沒有解決的相關問題。 Rails, Ransack: How to search HABTM relationship for "all" matches instead of "any"

Convert ActiveRecord habtm query to Arel

UPDATE 它看起來像問題是has_and_belongs_to_many不可解事件https://github.com/ernie/ransack/issues/164

回答

0

您可以通過聯想添加它,FE: class Person < ActiveRecord::Base PERSON_SEARCH_OPTIONS = :name_or_email_or_tags_name_cont end 它爲我

我想這是更好的方法。