【发布时间】:2013-07-29 13:50:37
【问题描述】:
我正在为我们的网站创建一个可自定义的导航菜单,但遇到了以下问题。
我需要为网站上的任何控制器和操作生成一个 URL,并可以选择传递参数。我能够做到前者只需简单地说:
url_for(:controller => nav[:controller_name], :action => nav[:action_name])
这非常适合将您发送到 {controller}/{action}。例如。新闻/文章
突然加入选项会改变游戏规则。现在我需要把你送到类似的地方: {controller}/{action}/{category}/{slug}/{id}
例如。新闻/文章/世界统治/montana-max-vows-revenge/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 列表。我确定肯定有更好的方法来做到这一点?
【问题讨论】:
-
为什么只能使用
url_for?为什么不直接使用new_article_path这样的命名路由呢?
标签: ruby-on-rails ruby ruby-on-rails-3 url-routing