Как указать вложенные параметры в маршрутах - PullRequest
2 голосов
/ 30 августа 2011

В 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 ]

1 голос
/ 30 августа 2011

Я не уверен, что есть способ сообщить системе маршрутизации 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 только те ключи, которые вам нужны, или некоторые дополнительные.

0 голосов
/ 05 октября 2011

С помощью фильтра маршрутизации вы можете делать все, что захотите, с помощью URL https://github.com/svenfuchs/routing-filter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...