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とは、 IDMadisonではなく、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つのオプションを渡すだけでも、そのエラーが発生します。

4

2 に答える 2

1
listings = listings.where("neighborhood_id in (?) ", neighborhood_id) 
于 2013-02-21T11:49:24.540 に答える
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" } %>
于 2013-02-21T12:19:24.000 に答える