Ответ 1
Встроенный from_xml
Метод Rails Hash
сделает именно то, что вы хотите. Чтобы ваш response.parsed_response
правильно отображался в хэш, вам нужно gsub()
вывести строки новой строки:
hash = Hash.from_xml(response.parsed_response.gsub("\n", ""))
hash #=> {"Result"=>{"success"=>"true"}}
В контексте разбора хэша в Rails объекты типа String
не существенно разные, чем те, что Symbol
из общая перспектива программирования. Однако вы можете применить метод Rails symbolize_keys
к выходу:
symbolized_hash = hash.symbolize_keys
#=> {:Result=>{"success"=>"true"}}
Как вы можете видеть, symbolize_keys
не работает с любыми вложенными хешами, но вы можете итерации через внутренние хэши и применить symbolize_keys
.
Последняя часть головоломки состоит в том, чтобы преобразовать строку "true"
в логическое true
. AFAIK, нет способа сделать это на вашем хэше на месте, но если вы выполняете итерацию/работу над ним, вы можете реализовать такое решение, как тот, который предлагается в этом сообщении:
def to_boolean(str)
return true if str == "true"
return false if str == "false"
return nil
end
В основном, когда вы достигаете внутренней пары ключ-значение, вы должны применить to_boolean()
к значению, которое в настоящее время установлено на "true"
. В вашем примере возвращаемое значение является логическим true
.