Рельсы: небольшая поисковая логическая проблема - PullRequest
0 голосов
/ 17 сентября 2009

плохо знакомы с рельсами ... так голые со мной.

Я успешно установил и настроил searchlogic для базового поиска (по ключевым словам). У меня есть следующая проблема:

@search = Proposal.search(params[:search])
@proposals = @search.all

Приведенный выше код работает правильно, если я ввожу ключевое слово, такое как «красный». Это поднимет все с красным ключевым словом. Или, если я наберу «зеленый», он выведет все с зеленым в качестве ключевого слова. Однако, когда я набираю «красный зеленый» в поле поиска, он ТОЛЬКО вызывает случаи, когда ключевые слова ОБА красные и зеленые (и не вызывает случаи, когда они могут иметь только одно из двух ключевых слов). Да, я использую keyword_like_any. Я могу видеть, в чем заключается общая проблема, через debug, Keywords_like_any: зеленый красный. Приведенный ниже код работает так, как я хочу (выведите любой красный или зеленый).

@search2 = Proposal.keywords_like_any("red", "green")
@test = @search2.all

Итак, я считаю, что для решения этой проблемы мне нужно включить первый код для просмотра параметров [: search] в виде массива? Я попытался сделать params [: string] .to_s.split (как показано в railscast), однако это не сработало.

Если кто-то может указать мне правильное направление, я был бы признателен за это.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2009

*_like_any предназначен для использования с флажками помощников форм (f.check_box), которые выводят массивы в ваш хэш params, а не f.text_field, который выводит строки. Если вы все еще хотите использовать их с f.text_field, вы можете:

  • разделить поле с помощью Javascript на стороне клиента, чтобы вывести массив
  • разделите его в вашем контроллере

Учитывая, что ваше поле называется клавиатура, вот код, который должен решить вашу проблему:

params[:search][:keywords_like_any] = params[:search][:keywords_like_any].split(' ')
@proposals = Proposal.search(params[:search])

Вы можете пропустить строку @proposals = @search.all, потому что результаты поиска работают как массив.

0 голосов
/ 17 сентября 2009

Возможно, я не понимаю ваш вопрос, но мне кажется, что вы пытаетесь внедрить что-то в контроллер, принадлежащий представлению. Если ваш взгляд имеет это:

- form_for @search do |f|
  = f.text_field :color_like_any

тогда ваш первоначальный пример контроллера будет работать.

0 голосов
/ 17 сентября 2009

Вы сказали, что пытались params[:string].to_s.split - я не знаю, опечатка ли это, но это должно быть params[:search].to_s.split

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...