4

我正在开发一个 Rails 应用程序,我正在寻找一种方法来根据 url 中是否存在参数来路由到控制器中的不同操作。

例如,我想website.com/model路由到model#index,但是我想website.com/model?opt=dev路由到model#show。有什么办法可以做到吗?

4

2 回答 2

4

使用路由约束查看请求对象,看看它是否有 URL 参数。如果您使用的是宁静路线,则希望将此“一次性”放在宁静路线之前。像这样的东西:

get 'users' => 'users#show', constraints: { query_string: /.+/ }
resources :users

所以这就是说,如果您请求“/users?opt=dev”,那么它将与您的特殊情况相匹配。否则,它会通过您正常的宁静路线到达索引操作。然后,您的 model#show 操作将必须知道拿起 param[:opt] 并对其进行任何处理。

另外,请注意,正则表达式非常松散,它只是检查任何参数......你需要收紧它以适应你想要做的任何事情。

于 2012-06-29T19:26:17.580 回答
1

不完全一样,但是如果你来到这篇文章并且想知道如何通过 POST 来做同样的事情,那么你可以根据 request_paramters 来做。

为您的路线.rb ..

module MyConstraintName  
extend self
  def matches?(request)
    request.request_parameters["routeFlag"] == "routeToModelShow"
  end
end

match "pages/:id", :via=>:post, :controller=>"model", :action=>"show",  :constraints => MyConstraintName

并以您的形式例如..

<%= hidden_field_tag :routeFlag, "routeToModelShow" %> 
于 2013-03-15T06:59:56.123 回答