在routes.rb中,我描述了搜索将如何显示
match "results//:transaction/:city(.:format)" => "search#index", :as => :seo_search_index
为我生成这种路线
seo_search_index /results/:transaction/:city(.:format) {:action=>"index", :controller=>"search"}
params对象充满了
params[:transaction]
params[:city]
params[:zip5]
但我希望param对象像这样填充
params[:search][:transaction]
params[:search][:city]
params[:search][:zip5]
有没有办法像这样指定
只是一个例子:
match "results//:search[transaction]/:search[city](.:format)" => "search#index", :as => :seo_search_index
答案 0 :(得分:1)
我不确定是否有办法告诉Rails路由系统您希望嵌套参数。您可以使用控制器中的before过滤器解决此问题:
class MyController < ApplicationController
before_filter do
params[:search] = params.slice(:transaction, :city, :zip5)
end
end
<强>更新强>
要回答您的真实问题,您可以这样做:
seo_search_index_url(@search)
或
seo_search_index_url(@search.slice(:transaction, :city, :zip5))
取决于@search
哈希是否仅包含您想要的密钥或其他一些密钥。
答案 1 :(得分:0)
使用帮助路由过滤器,您可以使用网址https://github.com/svenfuchs/routing-filter
制作您想要的内容