Как: Searchlogic и теги - PullRequest
       12

Как: Searchlogic и теги

2 голосов
/ 21 марта 2010

Я установил searchlogic и добавил will_paginate и т. Д.

В настоящее время у меня есть модель продукта с включенной маркировкой с помощью плагина act_as_taggable_on.Я хочу найти теги с помощью searchlogic.

Вот страница плагина taggable: http://github.com/mbleigh/acts-as-taggable-on

У каждого продукта есть «tag_list», к которому я могу получить доступ, используя Product.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, который позволил бы мне искать теги, добавленные к каждому продукту с помощью плагина taggable.

Спасибо!

1 Ответ

2 голосов
/ 21 марта 2010

Searchlogic использует существующие именованные области. Из документации Act-as-Taggable-on я вижу, что модели с тегами получают tagged_with именованную область. Таким образом, Product.tagged_with («тег») должен предоставить вам все продукты с тегом «тег». Вы можете комбинировать условия в searchlogic с "или", поэтому, если вы хотите найти все продукты с такими именами, как, описаниями или тегами, соответствующими данному тексту, вы должны использовать следующую область:

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>
...