【问题标题】:Rails route constraint not workingRails路线约束不起作用
【发布时间】:2012-10-02 14:30:34
【问题描述】:

我想匹配所有以/company/开头的网址,所以我有这个路由:

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

但是约束没有做任何事情。 URL /abc 也匹配此路由,PagesController 会引发错误。

我应该如何指定这个?

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

更新:我确实在普通的 Ruby 中尝试了上面的正则表达式,它可以工作。我也试过没有 ^ 在公司前​​面(虽然我确实需要公司作为第一个词),但没有运气。

更新 2:问题似乎出在通配符上,通配符路由是否适用于约束?当路由中有通配符时,我无法让任何约束起作用。

更新 3:原来这只是一个 bug in Ruby on Rails

【问题讨论】:

  • 为什么id参数里面需要/company
  • @RyanBigg - id 需要 company(前面没有 /)的原因是 thinkbot 的高压 gem 的工作原理。 id 需要完整路径。
  • 一个(潜在的)问题是您不能在路由约束中锚定正则表达式。 Rails 应该在遇到^ 时给你一个错误。诚实地?在研究高压后,我会把那颗宝石扔掉。它对您的作用如此 很少,因此不值得破坏您的路由表以使其正常工作。 Rails 已经让静态页面变得非常、非常简单了。
  • 创建PagesController,添加get "pages/:action" => "pages#action",您已经完成了 Gem 提供的所有功能。
  • 作为最后一点,不要混合旧/新哈希语法...constraints: { id: /^company\/.*/ } 而不是:constraints =>...

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 routes


【解决方案1】:

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

编辑:我只是假设 ruby​​ v 1.9.2

【讨论】:

    【解决方案2】:

    正如更新中所述,这是 Rails 中的一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多