1

ruby on rails初心者です...クライアントの反応によって表示されるURLを変える方法があれば知りたいです。つまり...ここに例があります:私はさまざまな場所でリストを表示するプロジェクトを作成しています...

現在、一般的に、リストのホームページ、検索ページ、および詳細ページがあります。したがって、それぞれの URL はofficespace/home、、、officespace/search?conditionsofficespace/detailpage?id=(controller-officespace)[&Conditions eg.---price,size,place,type...]

そのため、クライアントが検索を要求するたびに、同じ URL が表示されますが、もちろん、指定された条件が適用されます。

ここで、クライアントが場所のみを要求し、サイズ、価格などについて何も言及しない場合、URL は/listing/location_name.

彼が他の条件に言及するなら、それはlisting/(office_type)/size(x sq feet)_office_for_rent_in_locationname)

ところで(私はすでに名前の付いたコントローラーを持っておりlistings、その目的は別のものです。)

など…………実はいろいろとURLを変えたいんです。とにかく、助けてください。また、私にマニュアルを参照させないでください。私はすでにそれらを読みましたが、直接的な助けにはなりませんでした。

4

1 に答える 1

0

これは興味深いルーティングの課題です。基本的に、目標は、ユーザーのブラウザに表示する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でコントローラーに渡されます。したがって、次のことができます。paramsGET

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モデルが私の任意の推測とまったく同じように設定されている場合にのみ機能しますが、コードがどのように見える必要があるかを理解するためにそこから作業できることを願っています。そこにアンダースコアを入れることができなかったことに注意してください。ルートは、私が知る限り、スラッシュで区切られたセグメントにのみ一致します。それに取り組み続けると、それを超える方法が見つかるかもしれません。

于 2013-02-16T08:16:56.297 に答える