簡體   English   中英

Rails路由匹配查詢參數

[英]Rails routes matching query parameters

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散列中可用於控制器

以下解決方案基於“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'

除非有一個具體的理由讓你無法改變這一點,為什么不讓它變得安靜呢?

map.connect "api/my/path/bananas/:id, :controller => "bananas_controller", :action => "my_action"

如果您有許多參數,為什么不使用POSTPUT以便您的參數不需要通過URL公開?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM