2

searchlogic をインストールし、will_paginate などを追加しました。

現在、acts_as_taggable_on プラグインを使用してタグ付けが有効になっている製品モデルがあります。searchlogic を使用してタグを検索したい。

タグ付け可能なプラグインのページは次のとおりです: http://github.com/mbleigh/acts-as-taggable-on

各製品には、Product.tag_list を使用してアクセスできる「tag_list」があります。

または、Product.tags[0] を使用して特定のタグにアクセスできます

検索に使用するスコープが見つかりませんが、検索ロジックでは使用できません。これが私の作業フォームの一部です。

<p>
    <%= f.label :name_or_description_like, "Name" %><br />
    <%= f.text_field :name_or_description_like %>
</p>

:name_or_description_or_tagged_with_like と :name_or_description_or_tags_like および :name_or_description_or_tags_list_like を試して動作させようとしましたが、試したオプションが見つからないというエラーが表示されます (名前付きスコープが見つかりません)。これをどのように機能させるか、またはタグ付け可能なプラグインによって各製品に追加されたタグを検索できるようにする独自の named_scope を作成する方法を考えています。

ありがとう!

4

1 に答える 1

2

Searchlogic は、既存の名前付きスコープを使用します。act-as-taggable-on のドキュメントから、タグ付け可能なモデルがtagged_with名前付きスコープを取得することがわかります。したがって、 Product.tagged_with("tag") は、「tag」でタグ付けされたすべての製品を提供する必要があります。検索ロジックの条件を「または」と組み合わせることができるため、特定のテキストに一致する名前、説明、またはタグを持つすべての製品を検索する場合は、次のスコープを使用する必要があります。

Product.name_like_or_description_like_or_tagged_with("...")

フォームで直接使用することも:name_like_or_description_like_or_tagged_with、検索用の独自のカスタム スコープ プロシージャを作成することもできます。

scope_procedure :matching, lambda {|text|
  name_like_or_description_like_or_tagged_with(text)
}

次に、フォームで:matching.

<p>
    <%= f.label :matching, "Search term" %><br />
    <%= f.text_field :matching %>
</p>
于 2010-03-21T09:23:05.100 に答える