当前位置:  开发笔记 > 后端 > 正文

Rails路由匹配查询参数

如何解决《Rails路由匹配查询参数》经验,为你挑选了1个好方法。

Rails路由非常适合匹配URL的RESTful样式'/'分隔位,但我可以匹配map.connect配置中的查询参数.我想要调用不同的控制器/动作,具体取决于后面的参数的存在'?'.

我正在尝试这样的事......

map.connect "api/my/path?apple=:applecode", :controller => 'apples_controller', :action => 'my_action'
map.connect "api/my/path?banana=:bananacode", :controller => 'bananas_controller', :action => 'my_action'

出于路由目的,我不关心参数的值,只要它在params哈希中可用于控制器



1> 小智..:

以下解决方案基于"Rails Routing from the Outside In"rails指南(http://guides.rubyonrails.org/routing.html)中的"高级约束"部分.

在你的config/routes.rb文件中,包含一个识别器类有匹配吗?方法,例如:

class FruitRecognizer
  def initialize(fruit_type)
    @fruit_type = fruit_type.to_sym
  end

  def matches?(request)
    request.params.has_key?(@fruit_type)
  end
end

然后使用类中的对象作为路由约束,如:

map.connect "api/my/path", :contraints => FruitRecognizer.new(:apple), :controller => 'apples_controller', :action => 'my_action'

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有