2013-02-21 2 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 ParkMadison 2 개 지역이 아닌 ID의 이름입니다.

어떻게 작동합니까?

감사합니다.

편집 1

문제가 아니라 항목의 배열 양식 입력 전환에있어서, params[:search] 자체의 조회에 없을 것으로 보인다.

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

내가 neighborhood.name을보고 neighborhood_id를 전달하고 있다는 사실에 집착하지 마십시오 내가 좋아하는 뭔가를 할 검색 방법을 변경했습니다. 필드 neighborhood_id에 대한 매개 변수가 실제로 neighborhood의 이름이라는 것을 알고 있기 때문에 방금했습니다. 이것이 효과가 있었다면, 나는 약간의 물건을 리팩토링 하였을 것이지만, 그렇지 않았다. 그래서 그것에 매달리지 마십시오.

는하지만 여전히 난 그냥 1 옵션을 전달하더라도 나는 여전히 오류, 오류를 또한 undefined method 'to_i'....

를 반환합니다.

+0

합니다. 이웃의 ID를 얻으려면 이름에 대한 setter를 정의하고 해당 setter 메서드에서 이웃의 ID를 가져올 수 있습니다. – jvnill

+0

몇 가지 코드 예제를 보여 주셔서 감사합니다. – marcamillion

답변

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

그게 내가 지금 가지고있는 것보다 효과적이지 않습니까? – marcamillion

+0

그건 작동하지 않습니다. 여전히 같은 오류를 반환합니다. – marcamillion

+0

검색 매개 변수에서 여전히 ID가 아닌'neighborhood'의 이름을 전송합니다. 즉,''search "=> {"neighborhood_id "=> ["Alley Park, Madison, "]' – marcamillion

0

당신은 대신이 같은 입력 필드에서 동네 이름의 ID를 얻을 수 있습니다 : 당신은 검색 및 이웃 사이에 조인 테이블을 추가하여 그것을 통해 갈 수

<%= 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

배열에 ID의 컬렉션이 포함되어 있으므로 배열을 반복해야합니다. 'key = "% # {keywords} %"'문은 분할하여 각 ID를 얻기 위해 반복 할 수있는 배열을 포함합니다 . –

+0

하지만 ... 나는 '이웃'조회에서 '키'를 사용하지 않고 있습니다. 지금은 주석 처리가되어 있고 사용되지 않는 필드에 해당합니다. 또한 매개 변수를 통해 보았을 때 나는 아닙니다. params에있는 ID 모음을 봅니다.'검색'=> { "neighborhood_id"=> [ "Alley Park, Madison,"], "num_bedrooms"=> "", "num_bathrooms"=> ""검색에 대한 매개 변수는 다음과 같습니다. "min_price"=> "", "max_price"=> "", "boro_id"=> "", "property_type_id"=> ""}' – marcamillion

관련 문제