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 回答