2

我需要确定我正在处理的应用程序的当前路径中的路由段键的数量,尽管在相关的 Rails 3 源文件中进行了一些研究,但我无法弄清楚。

我知道如何使用url_forrequest从当前路线构建路径,但我不知道如何实际到达正在使用ActionController::Routing::Route的路线的映射url_for。如果我能得到我需要的路由实例,我可以调用 Route#segment_keys 并得到我需要的东西。

如果有人感兴趣,我这样做的原因是我可以使用选择下拉列表在资源之间切换并停留在适用于当前选定资源的当前视图上,但前提是当前路径不包含嵌套路径(即切换/resources/1/edit/resources/2/edit不要切换/resources/1/subresources/1到,/resources/2/subresources/1因为subresource数字1不是resource2的孩子)。

4

3 回答 3

0

你需要所有的段键还是只需要一种?

我能够使用此代码获得文字键

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

于 2012-10-08T19:31:09.657 回答
0

这样的事情会有帮助吗?它解析路由哈希的路径。

> 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"}
于 2015-04-06T15:37:14.940 回答
0

我有一个案例需要做这样的事情,所以我在 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 的数组。从这里,我可以提取出我想要的内容或计算数组中元素的数量。我希望这能把你推向正确的方向。

于 2011-12-14T22:39:32.953 回答