私は書いているレールアプリで検索方法を持っています。ここに抜粋があります。コレクションパスへの呼び出しはIDを渡し続けます
目的は、正規表現を使用して、すべてのアイテムを検索クエリと一致する説明と照合することです。次に、一致するすべての項目IDが別のページに文字列として渡されます。 (これはすべて検索コントローラで行われます)。
アイテムコントローラは、その文字列をキャッチし、それらを配列に分割し、一致するオブジェクトのリストを表示します。
しかし、私は現在、問題が発生しています。これは、レールがredirect_to文に別のパラメータ({"id" => "search"}であり、 :A1" 。これは明らかに1(IDはすべての数値です)ので、アプリのクラッシュを見つけることができません。このような場合は、なぜ誰もがうまくできる検索コントローラ内の
rquery = Regexp.new(Regexp.escape(@query), Regexp::IGNORECASE)
item_list = []
Item.all.each{|item| item_list << item if rquery.match(item.shortdescr)}
unless item_list == nil
ids = ""
maybe_matters.each do |matter|
ids += item.id.to_s + " "
end
redirect_to search_items_path(ids: ids)
return
end
。? アイテムコントローラ内
def search
authorize! :show, Item
@id = params[:ids].split
@search = []
@id.each do |id|
@search << id.to_i
end
@items = Item.accessible_by(current_ability).where(id: @search).order('completed desc nulls last').page params[:page]
end
EDIT
場合、それは、関連するだ、これはルートファイルの(非常に小さい)部分です:
resources :items, only: [:index, :show] do
collection do
post :search
end
end
POST to GET changeが修正されました。ありがとう –