ユーザーが検索フォームのフィールドで複数のレコードを選択できるようにしようとしています。
このようなもの:
<%= 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つのオプションを渡すだけでも、そのエラーが発生します。