0

広告モデルがあります。各広告はエリアに属しています。

より読みやすいURLを使用するために、routes.rbにカスタムパスを定義しました。

match "/adverts/:area_id/:id" => "adverts#show", :as => :advert_semantic

これは次のようなものを生成します

/adverts/manhattan/123

ただし、ごくまれに、広告がエリアに割り当てられていない可能性があります。これらのシナリオでは、Railsはエラーをスローし、パスを要求するページはレンダリングされません。

広告に最初にエリアが割り当てられているかどうかを確認してこれを回避したいと思います。エリアがない場合は、フォールバックとして通常のパス(/ adsverts / 123)を作成します。

これを行うための最良の方法は何を提案しますか?たとえば、上記を実行するヘルパーメソッドを作成するのが最善でしょうか、それとも、メソッドが同じページで複数回呼び出された場合、これはパフォーマンスに影響を与えますか?

4

1 に答える 1

0

もちろん、追加のアクションを実行するとパフォーマンスに影響しますが、注意が必要な場合は、これを禁止するべきではありません(また、キャッシュは常にオプションです)。

この場合、ヘルパーが私の選択になります。このようなもの..

def advert_link( advert )
  if advert.area.blank?
    link_to advert.title, advert
  else
    link_to advert.title, advert_semantic_path( advert, area_id: advert.area.id )
  end 
end

もちろん、使用量にもよりますが、オーバーヘッドは最小限に抑えられます。

于 2012-09-30T18:29:15.227 に答える