Rails使用包含句点的参数进行路由

时间:2010-12-22 02:42:51

标签: ruby-on-rails rails-routing

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

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

(很好的教程here

然而,在更现代版本的Rails(2.3.x)中,我看到这个失败了::域名正在捕捉所有内容,并且:当请求进入/c/amazon.com.html时,格式为空白

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

谢谢, 汤姆

2 个答案:

答案 0 :(得分: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,那么这可能有所帮助。根据{{​​3}},我认为:requirements哈希可能是罪魁祸首。试试这条路线,看看它是否有效:

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

答案 1 :(得分:-1)

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

原因是浏览器期望。定义文件类型,你无法解决这个问题。

使用this gem让您轻松上手。