10

プロジェクトのタグ付けにはact_as_taggable_onを使用し、検索にはsunspot/solrを使用しています。

奇妙な予期しない結果が得られます。最初のセットアップ(ショートバージョン):

モデル:

Class Person
  has_many :projects

  searchable do
    string :project_tags, :multiple => true do
      projects.map { |p| p.tag_list}.flatten
    end
  end

Taglistは、act_as_taggable_onのメソッドであり、プロジェクトごとにタグの配列を返します(fe ["foo"、 "bar"])。プロジェクトメンバーのプロジェクトタグにインデックスを付けます。

私たちのコントローラーで、次のことを行います。

Person.search() do
   with(:project_tags).any_of(params[:tags])
end

これにより、適切な人が返されます。ここまでは順調ですね。

問題
複数のタグを検索できるようにしたい。したがって、黒点の指示に従って、配列を渡します。コードはおおよそ次のようになります。

@tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(@tags_array)
end

これで、Sunspotは、使用するタグに関係なく、結果としてすべての人に提供されます。私たちはこれをコンソールで狂ったようにテストしてきましたが、どこが間違っているのか理解できません。

どんな助けでもいただければ幸いです!
アーウィン

4

1 に答える 1

8

わかりました。これは自分たちで「解決」しました。誰かが同じ質問を探しに来た場合に備えて、ここに報告します。

どういうわけか、Sunspotは検索宣言の@tags_arrayが気に入らないのですが、テストを行った後は@variableが機能しなくなります。次のように変更するとすぐに:

tags_array= params[:tags].split(/ /)
Person.search() do
   with(:project_tags).any_of(tags_array)
end

機能した。

乾杯、
アーウィン

于 2011-02-21T16:56:19.673 に答える