如何从Rails 3路线获取分段键?

| 我需要确定我正在处理的应用程序的当前路径中路由段键的数量,尽管在相关的Rails 3源文件中进行了一些挖掘,但仍无法弄清。 我知道如何使用
url_for
request
从当前路线构建路径,但是我不知道如何实际到达映射到
url_for
正在使用的路线的
ActionController::Routing::Route
。如果可以获取所需路由的实例,则可以调用Route#segment_keys并获取所需的路由。 如果有人感兴趣,我这样做的原因是,我可以在带有选择下拉菜单的资源之间切换,并停留在适用于当前选定资源的当前视图上,但前提是当前路径不包含嵌套的路径(即将
/resources/1/edit
切换到
/resources/2/edit
,但不要在
/resources/1/subresources/1
/resources/2/subresources/1
之间切换,因为
subresource
1号不是
resource
2的子级)。     
已邀请:
我遇到了需要执行以下操作的情况,因此我在application_helper.rb中添加了一个方法:
def display_sub_navigation
  if admin_signed_in?
    url_path = request.fullpath.split(\"/\")
    if url_path.size > 3 && File.exists?( Rails.root.join(\"app/views/shared/_#{url_path[2]}_sub_navigation.html.erb\") )
      render :partial => \"/shared/#{url_path[2]}_sub_navigation\"
    end
  end
end
如您所见,使用request.fullpath.split(\“ / \”)创建了一个分配给url_path的数组。从这里,我可以提取出想要的内容或计算数组中元素的数量。我希望这能将您推向正确的方向。     
您需要所有的段键还是只是某种键? 我可以用此代码获得文字键
Rails.application.routes.routes.collect do |i|
  i.path.spec.grep(Journey::Nodes::Literal).collect(&:left)
end
那只是让我了解一下文字片段的数组-我敢打赌,您可以修改它以计算存在的片段键的数量(或者对文字立即执行一次,对符号重复一次)
Journey::Nodes::Cat
支持
to_s
,这将为您提供所使用的原始字符串来构造路线和
to_regexp
,这会给您一个正则表达式,您可以在
request.path
上运行     
这样的帮助吗?它解析路由散列的路径。
> uri = URI(\"http://localhost:3000/items/2015/3\") # some URI for your request, or the URL/Path in question
> Rails.application.routes.recognize_path(uri.path)
=> {:controller=>\"items\", :action=>\"index\", :year=>\"2015\", :month=>\"03\"}
    

要回复问题请先登录注册