これは興味深いルーティングの課題です。基本的に、目標は、ユーザーのブラウザに表示するURLの種類に一致する特別な式を作成することです。これらの式は、のmatch
数式で使用されますconfig/routes.rb
。次に、関連する検索ページのフォームアクションとリンクが、デフォルトのページではなく、それらの特殊なURLにリンクしていることを確認する必要があります。開始する例を次に示します。
ルート.rb
match "/listing/:officeType/size/:squarefeet/office_for/:saleOrRent/in/:locationName" => "searches#index"
match "/listing/*locationName" => "searches#index"
resources :searches
listings
あなたはあなたのコントローラーが何か他のもののためのものであると明確に述べたので、私はちょうど私たちの新しいコントローラーに名前を付けましsearches
た。このコントローラーのメソッドのコード内で、index
ビューに渡すために関連データを収集する方法を決定する必要があります。:
上記の式でaでマークされているものはすべて、HTTPクエリ文字列パラメーターであるかのようにハッシュmatch
でコントローラーに渡されます。したがって、次のことができます。params
GET
searchs_controller.rb
def index
if params[:squarefeet] && params[:officeType] && params[:locationName]
@listings = Listing.where("squarefeet >= ?", params[:squarefeet].to_i).
where(:officeType => params[:officeType],
:locationName => params[:locationName])
elsif params[:locationName]
@listings = Listing.where(:locationName => params[:locationName])
else
@listings = Listing.all
end
end
そして、これらのリンクの1つにユーザーを送信するには:
views / searchs / index.html.erb
<%= link_to "Click here for a great office!", "/listing/corporate/size/3200/office_for/rent/in/Dallas" %>
上記の例は、Listing
モデルが私の任意の推測とまったく同じように設定されている場合にのみ機能しますが、コードがどのように見える必要があるかを理解するためにそこから作業できることを願っています。そこにアンダースコアを入れることができなかったことに注意してください。ルートは、私が知る限り、スラッシュで区切られたセグメントにのみ一致します。それに取り組み続けると、それを超える方法が見つかるかもしれません。