你可以使用对象映射或lambdas在Rails中指定路由约束吗?

时间:2017-01-14 04:44:55

标签: ruby-on-rails ruby-on-rails-4

我正在尝试执行以下操作:

constraints( brand: "/#{Brand.all.map(&:name).join('|')}/" )

不幸的是,它似乎没有按预期工作。有没有办法做到这一点?也许使用lambda?

2 个答案:

答案 0 :(得分:1)

您可以使用自定义类定义自己的复杂约束。该类应该响应matches?方法,该方法以request为参数。

rails文档在高级约束部分here中指定了此方法。

答案 1 :(得分:1)

@ 31piy提供的答案让我走上正轨,但最终并不是完整的答案。这是工作代码:

constraints( lambda { |request| Brand.pluck(:slug).include?(request.params["brand"]) } ) do
  collection do
    get ':brand/:release', to: 'releases#show', as: 'release'
  end
end