7

私はacts-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

Ransack 検索で、気分のいずれかを持ち、国と完全に一致するレコードを見つけられるようにしようとしています。しかし、一致するレコードがあるのに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 月 11 日 問題は、正しいランサック述語の適用にあるはずです。実際には解決されていない関連する質問がいくつかあります。 Rails、Ransack: HABTM 関係を「任意」ではなく「すべて」で検索する方法

ActiveRecord の habtm クエリを Arel に変換する

更新 has_and_belongs_to_many https://github.com/ernie/ransack/issues/164の解決不可能なイベントのようです。

4

1 に答える 1

0

関連付けによって追加できます。fe: class Person < ActiveRecord::Base PERSON_SEARCH_OPTIONS = :name_or_email_or_tags_name_cont end 私にはうまくいきます

私はそれがより良い方法だと思います。

于 2016-10-11T18:20:22.233 に答える