gpt4 book ai didi

ruby-on-rails - ruby on rails - routes.rb - 当文件名中存在多个句点时匹配文件扩展名

转载 作者:行者123 更新时间:2023-12-03 12:19:52 25 4
gpt4 key购买 nike

我已经创建了一个路由加 Controller ,用于按照此处的说明在 ruby​​ on rails 中执行动态 css:

http://www.misuse.org/science/2006/09/26/dynamic-css-in-ruby-on-rails/

为了适应较新版本的 ruby​​ on rails,需要进行一些更改,但问题出在 routes.rb 条目上。原始条目是这样的:

  # dynamic CSS (stylesheets)
map.connect 'rcss/:rcssfile',
:controller => 'rcss',
:action => 'rcss'

这不适用于较新版本的 RoR,但我发现此解决方案有效:

  # dynamic CSS (stylesheets)
map.connect 'rcss/:rcssfile.css',
:controller => 'rcss',
:action => 'rcss'

但是,现在我很沮丧,因为我无法获得一个包罗万象的文件类型扩展处理程序。该请求必须具有 .css 扩展名。进一步研究它,我想到了这个:

  # dynamic CSS (stylesheets)
map.connect 'rcss/:rcssfile.:format',
:controller => 'rcss',
:action => 'rcss'

这样就好多了。现在我可能会请求一个以 .foobar 或其他任何结尾的文件并将其与处理程序匹配。我不一定会这样做,但更多的是理解一切。

然后我尝试创建一个看起来像 "foo.net.rcss"的文件。现在看来第一个点把一切都搞砸了。 “没有路由匹配 rcss/foo.net.css”。我的问题如下:

  1. 无论文件名中有多少个点,如何匹配任何文件名和任何扩展名?

  2. 为什么第一个示例在以后的 RoR 版本中不起作用?

  3. 为什么多个点会破坏匹配?

在此先感谢您的帮助。

--------更新--------

我正在使用 Rails 3.0.5。根据更多研究,我可以将语法缩短为:

match 'rcss/:rcssfile', :to => 'rcss#rcss'

这相当于第一个似乎不起作用的示例,但是使用此语法它可以按预期工作。

match 'rcss/:rcssfile:.:format', :to => 'rcss#rcss'

这也像我之前的示例 #3 一样工作,但是它仍然存在无法匹配具有多个句点的文件的问题。

最佳答案

似乎标记标准“:paramater”需要特别考虑句点字符。 ":parameter"将匹配最多一个句点的路径,":parameter.:extension"将匹配最多两个句点的路径,但 :extension 将只是两个句点之间的内容,等等。

解决这个问题的方法是使用所谓的“Route Globbing”,它使用星号而不是冒号:

match 'rcss/*rcssfile', :to => 'rcss#rcss'

唯一需要注意的是,这将匹配星号后的任何内容,包括子目录。因此,您要确保这不会意外暴露任何安全文件或意外渲染内容。

关于ruby-on-rails - ruby on rails - routes.rb - 当文件名中存在多个句点时匹配文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com