4

在旧版本的 Rails 中,您可以有一个包含句点的参数(通常保留以将其与格式分开),如下所示:

map.connect 'c/:domain.:format', :controller=>'home', :action=>'click_credit', :requirements => { :domain => %r([^/;,?]+) }

(这里有很好的教程)

但是,在更现代的 Rails 版本(2.3.x)中,我看到这失败了 - :domain 正在捕获所有内容,并且 :format 在请求 /c/amazon.com.html 时为空白

关于如何修改它的任何想法?

谢谢,汤姆

4

2 回答 2

3

升级到 rails 3 应该可以解决您的问题。我在 rails 3 中尝试了您的路线,它运行良好(使用新的路由语法稍作更改):

match 'c/:domain.:format', 
      :controller=>'home', 
      :action=>'click_credit', 
      :domain => %r([^/;,?]+)
# 'c/amazon.com.html' => domain: amazon.com , format: html

如果升级到 rails 3 不是一个选项,那么这可能会有所帮助。根据这个答案,我认为:requirements哈希可能是罪魁祸首。试试这条路线,看看它是否有效:

map.connect 'c/:domain.:format', 
            :controller=>'home', 
            :action=>'click_credit', 
            :domain => %r([^/;,?]+)
于 2010-12-22T08:56:30.883 回答
-1

您需要将域更改为 slug 并将任何 [句点] 替换为 [斜线]。

原因是因为浏览器期望 . 定义文件类型,你不能解决这个问题。

使用这个宝石让您轻松。

于 2010-12-22T08:28:04.793 回答