我正在开发一个 Rails 应用程序,我正在寻找一种方法来根据 url 中是否存在参数来路由到控制器中的不同操作。
例如,我想website.com/model
路由到model#index
,但是我想website.com/model?opt=dev
路由到model#show
。有什么办法可以做到吗?
我正在开发一个 Rails 应用程序,我正在寻找一种方法来根据 url 中是否存在参数来路由到控制器中的不同操作。
例如,我想website.com/model
路由到model#index
,但是我想website.com/model?opt=dev
路由到model#show
。有什么办法可以做到吗?
使用路由约束查看请求对象,看看它是否有 URL 参数。如果您使用的是宁静路线,则希望将此“一次性”放在宁静路线之前。像这样的东西:
get 'users' => 'users#show', constraints: { query_string: /.+/ }
resources :users
所以这就是说,如果您请求“/users?opt=dev”,那么它将与您的特殊情况相匹配。否则,它会通过您正常的宁静路线到达索引操作。然后,您的 model#show 操作将必须知道拿起 param[:opt] 并对其进行任何处理。
另外,请注意,正则表达式非常松散,它只是检查任何参数......你需要收紧它以适应你想要做的任何事情。
不完全一样,但是如果你来到这篇文章并且想知道如何通过 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" %>