0

これをどのようにフレーム化するかわからないので、ここに行きます....

次の link_to タグがあります。

<%= link_to("My test title",{:controller=>"search", :action=>"for-sale", :title => listing.title, :search_term => search_term, :id=> listing.id}) %>

そして、routes.rb ファイルに次のカスタム ルートを追加します。

map.connect ':controller/:action/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

非常に優れた SEO フレンドリーな URL を生成します。

/search/for-sale/sometitle/searchterm/123456

:action パラメータを両方から削除するにはどうすればよいですか。問題は、:action オプションを取り出して link_to タグを次のように変更する場合です。

<%= link_to("My test title",{:controller=>"search", :title => listing.title, :search_term => search_term, :id=> listing.id}) %>

そして私のカスタムルート:

map.connect ':controller/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

生成された URL は、もはや SEO フレンドリーではなく、非常に醜いものです。

/search?title=test&search_term=test&id=1141409

カスタム ルートはコントローラ内の正しいアクションにリダイレクトされるため、アクション オプションを URL に含める必要はありません。:action オプションを削除したり、別の名前に変更したりすると、URL が「歪んで」しまいます。これを行う方法をご存知ですか?

いくつかのオプションを試してみましたが、何もうまくいかないようです。

ありがとう!

4

1 に答える 1

3

まず、ルートにはパラメーター':controller/:title/search_item/:id'がありませんが:search_term、link_to に渡そうとしています。:search_term => search_term

第 2 に、常に controller を使用している場合は'search'、パラメーターとして渡す必要はありません。

だから、あなたのルートはおそらく'search/:title/:search_term/:id'

また、名前付きルートを使用してみてください:

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale'

<%= link_to("My test title", search_path(listing.title, search_term, listing.id)) %>

編集:オプションのパラメータ

ルートの最後でパラメーターのデフォルト値を指定できます。

したがって、設定すると

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale', :id => nil, :search_term => nil

id なしで URL を作成することsearch_path(listing.title, search_term) も、id と search_term の両方なしで作成することもできます。search_path(listing.title)

オプションのみにしたい場合:search_termは、ルートの最後に入れます:

map.search 'search/:title/:id/:search_term', :controller=>'search', :action=>'for_sale', :search_term => nil
于 2010-04-27T22:05:30.160 に答える