如何解决如何从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\"}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。