如何在路由中指定嵌套参数

时间:2011-08-30 09:34:30

标签: ruby-on-rails

在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

2 个答案:

答案 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

制作您想要的内容