2012-10-11 85 views
3

我想匹配以/company/开头的所有网址,所以我有这样的路线:Rails的路由约束不工作

match '/*id' => 'high_voltage/pages#show', :constraints => { id: /^company\/.*/ } 

但是约束没有做任何事情。网址/abc也符合此路线,并且PagesController会引发错误。

我应该如何指定?

我需要id参数在开始时包含company/,所以请不要说只做路由match '/company/*id'。这将给控制器一个id参数没有company/

UPDATE:我没有尝试上述正则表达式在正常Ruby和它的作品。我也试过没有在公司面前(虽然我确实需要公司是第一个字),但没有运气。

更新2:看来问题是通配符,支持通配符路线与约束工作?当路由中存在通配符时,我无法获得任何约束条件。

更新3:原来这是一个简单的bug in Ruby on Rails

+0

为什么id参数需要'/ company'在里面? –

+0

@RyanBigg - 理由id需要'公司'(没有/在前面)就是thinkbot的高压宝石的工作原理。该ID需要完整的路径。 –

+0

一个(潜在的)问题是您无法将您的正则表达式固定在路由约束中。 Rails *在遇到'^'时应该给你一个错误。说实话?在考虑高电压后,我会抛出这个宝石。它对你做的*很少,以至于不值得销毁你的路由表来使它工作。 Rails已经使静态页面变得非常简单。 – meagar

回答

2

正如更新指出,这是Rails的一个bug。

-2

看起来像一个语法错误。尝试使用:constraints => {:id => /^company/.*/}

编辑:我只是认为红宝石v 1.9.2

+4

你认为ruby 1.9.2语法是一个错误吗? – apneadiving