铁路路线编号中有一个点

发布于 2024-11-27 13:31:38 字数 160 浏览 1 评论 0原文

我正在开发 Rails 2.3.11。如果我有一个像 http://www.abc.com/users/efjson 这样的网址,我希望 id 是“ef”,预期格式为“json”。有人可以建议一种方法吗? 谢谢你!

I am working on Rails 2.3.11. If I have a url like http://www.abc.com/users/e.f.json , I expect the id to be 'e.f' and the expected format to be 'json'. Can someone please suggest a way to do it.
Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等待我真够勒 2024-12-04 13:31:38

由于 :format 约定,Rails 将解析所有没有任何点的参数。如果需要,您可以使用 带点的路由参数

# You can change the regex to more restrictive patterns
map.connect 'users/:id', :controller => 'users', :action => 'show', :id => /.*/

但由于“*”和“+”正则表达式通配符都是贪婪的,因此它将完全忽略 (.:format) 参数。

现在,如果您绝对需要在用户名中包含点,有一个伪解决方法可以帮助您:

map.connect 'users/:id:format', :controller => 'users', :action => 'show', :requirements => { :format => /\.[^.]+/, :id => /.*/ }
map.connect 'users/:id', :controller => 'users', :action => 'show'

缺点是您必须在 :format 正则表达式中包含点,否则它会被用户名表达式捕获。然后您必须在控制器中处理点分格式(例如:.json)。

Because of the :format convention, Rails will parse all parameters without any dots. You can have route parameters with dots if you want:

# You can change the regex to more restrictive patterns
map.connect 'users/:id', :controller => 'users', :action => 'show', :id => /.*/

But since both '*' and '+' regex wildcards are greedy, it will ignore the (.:format) param completely.

Now, if you absolutely need to have dots in the username, there is a pseudo-workaround that could help you:

map.connect 'users/:id:format', :controller => 'users', :action => 'show', :requirements => { :format => /\.[^.]+/, :id => /.*/ }
map.connect 'users/:id', :controller => 'users', :action => 'show'

The downside is that you have to include the dot in the :format regex, otherwise it would be caught by the username expression. Then you have to handle the dotted format (e.g.: .json) in your controller.

泅人 2024-12-04 13:31:38

这是一个类似于 andersonvom 的解决方案,但将所有内容都保留在一个规则中(并使用一些现代 Rails 路由缩写)。

map.connect 'users/:id(.:format)', to: 'users#show', id: /.*?/, format: /[^.]+/

(注意 :format 前面的 .

诀窍是添加可选格式 (.:format) 并使 id 正则表达式非贪婪,因此格式可以被识别。如果您想为路由命名,则将其保留在一条规则中非常重要,以便您可以以与格式无关的方式将其用于重定向、链接等。

Here is a solution similar to andersonvom's, but keeps it all in one rule (and uses some modern Rails routing abbreviations).

map.connect 'users/:id(.:format)', to: 'users#show', id: /.*?/, format: /[^.]+/

(Note the . in front of :format)

The trick is to add an optional format, (.:format) and make the id regex non-greedy so the format is recognised. Keeping it in one rule is important if you want to give the route a name, so that you can use it for redirects, links, etc in a format-agnostic way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文