Как: Searchlogic и теги

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

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

Вот страница плагина с тегами: 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.

Спасибо!


person jim    schedule 21.03.2010    source источник


Ответы (1)


Searchlogic использует существующие именованные области. Из документации plays-as-taggable-on я вижу, что модели с тегами получают tagged_with именованную область видимости. Таким образом, Product.tagged_with ("tag") должен предоставить вам все продукты, отмеченные тегом "tag". Вы можете комбинировать условия в 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>
person Michał Kwiatkowski    schedule 21.03.2010
comment
Спасибо, Михал, я неправильно понял, как его использовать. Я видел, что автор поставил named_score tagged_with, и, как я уже сказал, я пробовал это, но не интерпретировал его правильно. Я ценю ответ. Однако, когда я попытался использовать ‹p› ‹% = f.label: name_like_or_description_like_or_tagged_with, Name%› ‹br /› ‹% = f.text_field: name_like_or_description_like_or_tagged_with%› ‹/p›, я получил ошибку неправильное количество аргументов (0 для 1) когда я ввел любое значение в поле. Вы знаете, почему он это сделал? - person jim; 21.03.2010
comment
Какой код в вашем действии вызывает эту ошибку? Вы пробовали запустить Product.name_like_or_description_like_or_tagged_with("...") из консоли Rails? - person Michał Kwiatkowski; 21.03.2010
comment
Я попробовал настроить scope_procedure, и он отлично работает, если он такой, как вы сказали в своем примере: matching, где вы не выполняете name_or_description_or_matched_like. Я не могу связать tagged_with или настраиваемую область видимости, поэтому теперь я уверен, что делать, и я надеялся, что кто-то делал это раньше. Пробовал как в консоли, так и в приложении. - person jim; 14.04.2010