2013-02-21 121 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的名稱。如果這有效,我會重構一些東西,但事實並非如此。所以不要掛在那上面。

但仍返回錯誤undefined method 'to_i'....

而且,我仍然得到這個錯誤,即使我只是傳遞1個選項。

+0

您可以通過添加搜索和鄰里之間的連接表通過它去。要獲得社區的ID,您可以爲名稱定義一個setter,並使用該setter方法獲取社區的ID。 – jvnill 2013-02-21 11:38:22

+0

小心向我展示一些代碼示例? – marcamillion 2013-02-21 11:43:45

回答

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

這不是我現在有效的嗎? – marcamillion 2013-02-21 11:51:52

+0

這是行不通的。仍然返回相同的錯誤。 – marcamillion 2013-02-21 12:00:10

+0

在搜索參數中,它仍然發送「鄰居」的名稱,而不是ID - 即'「search」=> {「neighborhood_id」=> ['Alley Park,Madison,']' – marcamillion 2013-02-21 12:01:31

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 2013-02-21 12:25:59

+0

)你必須循環訪問數組,因爲它包含了ids的集合。語句'key =「%#{keywords}%」'包含數組,你可以通過每個數組來分割和循環以獲得每個id 。 – 2013-02-21 12:28:59

+0

但是......我在我的「鄰居」查找中沒有使用「key」,這對應於一個被註釋掉並且現在沒有被使用的字段,而且當我查看發送的參數時,我不是在參數中看到一組ID。這就是'search'的參數:'「search」=> {「neighborhood_id」=> [「Alley Park,Madison,」],「num_bedrooms」=>「」,「num_bathrooms」=>「」, 「min_price」=>「」,「max_price」=>「」,「boro_id」=>「」,「property_type_id」=>「」}' – marcamillion 2013-02-21 12:33:25