2013-02-21 115 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