2014-09-20 83 views
0
match '/main/*params', to: 'main#parse', :constraints => {:url => /.*/}, as: 'parser', via: 'get' 

params将与/p1/p2/p3/p4/调用。路线Globbing与参数包含斜杠

如何更改路线定义以省去一个参数/p1//p3/p4/ 并且仍然有params包含输入参数(/p1//p3/p4/)。现在params = p1/p3/p4/删除了一个正斜杠。

控制器:

def parse 
    p = params[:params].split("/") 
    ... 
end 

回答

0

这是你的 '通用' 路线:

/.*/ 

这应该匹配不仅/ P1/P2/P3/P4,但任何数量的参数

您可以尝试在您的通用之前声明一个路径,并指定您想要的参数数量:

/:parameter1/:parameter2/:parameter3 

这样,/ p1/p2/p4将匹配第二条路线并在匹配通用路线之前离开。类似地,/ p1/p2/p3/p4会跳过3个参数路由,但属于通用路由。

+0

我想避免这种情况。想象一下编号路线需要考虑空参数的每个排列。这就是为什么我想定义一条路径来解决任何可能性,然后在我的控制器中解析斜线。 – 2014-09-21 10:46:05

+0

我明白了。你能提供处理参数的控制器代码吗?这就是你需要改变的地方。在我看到我可以相应地更新我的答案后。 – 2014-09-21 16:13:10

+0

我将操作添加到了我的问题中。然而,参数到达控制器,参数被删除。所以'//'变成'/' – 2014-09-21 23:04:40