2

サイトのカスタマイズ可能なナビゲーション メニューを作成していますが、次の問題が発生しました。

サイト上の任意のコントローラーとアクションへの URL を生成し、必要に応じてパラメーターを渡す必要があります。私は単に次のように言うだけで前者を行うことができました:

url_for(:controller => nav[:controller_name], :action => nav[:action_name])

これは、{controller}/{action} に送信するのに最適です。例えば。ニュース/記事

オプションを投入すると、ゲームが突然変わります。次に、{controller}/{action}/{category}/{slug}/{id} のようなものに送信する必要があります。

例えば。ニュース/記事/世界支配/モンタナ-マックス-誓い-復讐/12345

上記のヘルパーは、次のようなものになります。

news_article_path('world-domination', 'montana-max-vows-revenge', '12345')

引数が原因で、バニラの url_for でそれを複製できませんでした。

私がやったこと、そして私が本当に好きではないことは次のとおりです。

url_for(send("#{nav[:controller_name]}_#{nav[:action_name]}_path", *nav[:options]))

send を使用してヘルパーを生成し、それに kwargs リストを渡します。確かにそれを行うためのより良い方法があると確信していますか?

4

1 に答える 1

1

オプションに名前を付けることができれば、これをきれいに行うことができます (読みやすくするために、ここでは複数の行に分けています)。

url_for({
  :controller => nav[:controller_name],
  :action => nav[:action_name]
}.merge(nav[:options] || {}))

どこ

nav = {
  :controller_name => 'news',
  :action_name => 'articles',
  :options => {
    :category => 'world-domination',
    :slug => 'montana-max-vows-revenge',
    :id => '12345'
  }
}
于 2013-07-29T15:54:37.290 に答える