#ruby-on-rails #ruby #ruby-on-rails-3
#ruby-on-rails #ruby #ruby-on-rails-3
Вопрос:
Если я преобразовываю хэш в строку запроса, как я могу преобразовать его обратно?
{:filters => {:colour => ['Red', 'Blue'], :size => 'Medium'}}.to_param
=> "filters[colour][]=Redamp;filters[colour][]=Blueamp;filters[size]=Medium"
Кажется, что Rails делает это автоматически, когда заполняет params
хэш, но возможно ли вызвать этот метод напрямую?
Спасибо.
Ответ №1:
Вы ищете Rack::Utils.parse_nested_query(query)
, который преобразует его обратно в Hash
. Вы можете получить его, используя эту строку:
require 'rack/utils'
Комментарии:
1.
Rack::Utils.build_nested_query('filters[colour][]=Redamp;filters[colour][]=Blueamp;filters[size]=Medium')
приводит кArgumentError: value must be a Hash
. Что я делаю не так?2. Ах, я вижу, вы отредактировали свой ответ.
parse_nested_query
работает отлично, спасибо!3. @gjb: да, извините, я постоянно путаю эти два параметра.
4. Значения Nil не сохраняются, вместо этого они будут пустыми строками:
Rack::Utils.parse_nested_query({foo: nil}.to_param) => {"foo"=>""}
Ответ №2:
query_string = "filters[colour][]=Redamp;filters[colour][]=Blueamp;filters[size]=Medium"
CGI::parse(query_string)
Комментарии:
1. Хорошо, но не совсем так. Это не генерирует хэш с ключом filters, который имеет хэш с ключом color, который имеет массив в качестве значения … что
Rack::Utils.parse_nested_query
и делает.