替换“。”在Rails路由中使用“%2E”

时间:2013-05-13 04:28:51

标签: ruby-on-rails

我有一个Rails控制器动作,其功能如下所示:

def rand
    if !params.has_key?(:name)
      rand_mymodel = Mymodel.offset(rand(Mymodel.count)).first
      redirect_to "/crawl/" + rand_mymodel.name
    end
    @model = Mymodel.where("name = ?", params[:name])[0]
end

路线:

get "crawl/:name" => "mymodel#rand"
get "crawl/" => "mymodel#rand"

如何允许.显示在:name属性中,但在路由/网址中将其替换为%2E(类似于用{{1}替换空格的方式})

我希望允许%20出现在.

1 个答案:

答案 0 :(得分:1)

您是否检查了相应的Guide

  

默认情况下,:id参数不接受点 - 这是因为   dot用作格式化路由的分隔符。如果你需要使用   dot中的一个点:id添加一个覆盖它的约束 - 例如   :id => / [^ /] + /允许除斜杠之外的任何东西。

您的name

也是如此
get "crawl/:name" => "mymodel#rand", name: /[^\/]+/