2013-02-21 3 views
0

Я пытаюсь разрешить пользователю выбирать несколько записей в поле в форме поиска.Как найти несколько записей в форме поиска?

Что-то вроде этого:

<%= f.input_field :neighborhood_id, collection: Neighborhood.order(:name), :url => autocomplete_neighborhood_name_searches_path, :as => :autocomplete, 'data-delimiter' => ',', :multiple => true, :class => "span8" %> 

Он посылает его к моей search модели, как это: @search = Search.create!(params[:search])

Это то, что Search.rb модель делает с ним:

key = "%#{keywords}%" 
listings = Listing.order(:headline) 
listings = listings.includes(:neighborhood).where("listings.headline like ? or neighborhoods.name like ?", key, key) if keywords.present? 
listings = listings.where(neighborhood_id: neighborhood_id) if neighborhood_id.present? 
listings 

Этот вопрос что это просто принимает 1 neighborhood_id, поэтому я получаю эту ошибку при выборе нескольких объектов:

undefined method `to_i' for ["Alley Park, Madison"]:Array 

Где Alley Park и Madison имена 2 кварталов, а не идентификаторы.

Так как я могу заставить это работать?

Спасибо.

Редактировать 1

Проблема, кажется, не быть в поиске из params[:search] самих по себе, а в преобразовании формы ввода в массив записей. Я попытался изменить метод поиска, чтобы быть что-то вроде:

listings = listings.includes(:neighborhood).where("neighborhoods.name like ?", neighborhood_id) if neighborhood_id.present? 

Не зацикливайтесь на том, что я, глядя neighborhood.name и проходящей в neighborhood_id. Я просто сделал это, потому что я знаю, что параметры для поля neighborhood_id были фактически именами neighborhood. Если бы это сработало, я бы переработал некоторые вещи, но это не так. Так что не зацикливайтесь на этом.

Но до сих пор возвращает ошибку undefined method 'to_i'....

Кроме того, я все еще получаю эту ошибку, даже если я просто передать в 1 вариант.

+0

вы можете пройти через него, добавив таблицы объединения между поиском и окрестностями. для получения идентификаторов окрестностей вы можете определить сеттер для имен и получить идентификаторы окрестности по этому методу setter. – jvnill

+0

Помогите показать мне пример с кодом? – marcamillion

ответ

1
listings = listings.where("neighborhood_id in (?) ", neighborhood_id) 
+0

Не так ли эффективно, что у меня есть сейчас? – marcamillion

+0

Это не работает. Все еще возвращает ту же ошибку. – marcamillion

+0

В параметрах поиска он по-прежнему отправляет имена «окрестности», а не идентификатор, то есть «поиск» => {«neighbour_id» => [«Alley Park, Madison»,] ' – marcamillion

0

Вы можете получить идентификатор вместо имен окрестностей от поля ввода, как это:

<%= f.input_field :neighborhood_id, collection: Neighborhood.order(:name), :url => autocomplete_neighborhood_name_searches_path, :as => :autocomplete, 'data-delimiter' => ',', :multiple => true, :class => "span8", :input_html => { :id => "neighborhood_id" } %> 
+0

Это все еще дает мне такая же ошибка :( – marcamillion

+0

Вам нужно пройти через массив, поскольку он содержит коллекцию идентификаторов. Операция 'key ="% # {keywords}% "' содержит массив, который вы можете разбить и пропустить через каждый, чтобы получить каждый идентификатор –

+0

Но ... Я не использую 'key' в поиске' соседства'. Это соответствует полю, которое закомментировано и не используется прямо сейчас. Кроме того, когда я просматриваю переданные параметры, я не видя коллекцию идентификаторов в параметрах.Вот как выглядят параметры для 'search':' "search" => {"neighbour_id" => ["Alley Park, Madison,"], "num_bedrooms" => "", "num_bathrooms" => "", "min_price" => "", "max_price" => "", "boro_id" => "", "property_type_id" => ""} ' – marcamillion

Смежные вопросы