Как получить рельсы для анализа параметров из CURL как JSON или XML вместо строки? - PullRequest
4 голосов
/ 14 мая 2011

Как получить рельсы для разбора параметров как JSON или XML вместо строки? Я использую рельсы 3.0.7.

Вот что я хочу, чтобы произошло.

Parameters: {"user"=>{"email"=>"user@blah.com", "password"=>"[FILTERED]"}}

Вот что происходит

# controller
def create
  logger.debug params
end

# curl from command line
curl -i -H 'Content-Type:application/xml' -H 'Accept:application/xml' -X POST -d "<user><email>user@blah.com</email><password>password</password></user>" http://localhost:3000/api/v1/sessions.xml

# response
Started POST "/api/v1/sessions" for 127.0.0.1 at 2011-05-14 02:16:23 -0700
Processing by Api::V1::SessionsController#create as XML
Parameters: {"<user><email>user@blah.com</email><password>password</password></user>"}
{"<user><email>user@blah.com</email><password>password</password></user>", "action"=>"create", "controller"=>"api/v1/sessions", "format"=>"xml"}

То же самое происходит с JSON.

Ответы [ 2 ]

9 голосов
/ 14 мая 2011

HTTP POST - это обычно пары имя / значение.

Rails делает все возможное, чтобы выяснить, что вы передали, и превратить его в хэш параметров, но в действительности это не имеет смысла.

Вы можете получить доступ к запросу напрямую:

def create
  string = request.body.read
  # if string is xml
  object = Hash.from_xml(string)
  # elsif string is JSON
  object = ActiveSupport::JSON.decode(string)
end
1 голос
/ 15 мая 2011

Выполнить rake middleware, проверить, используется ли ActionDispatch::ParamsParser.Взгляните на actionpack-3.0.7/lib/action_dispatch/middleware/params_parser.rb Это промежуточное ПО, которое анализирует предоставление данных в хэш params.Я предполагаю, что проблема в curl, так как он не публикует запрос так, как вы думаете.Может быть, ему нужно пробел после двоеточия (в заголовках), я не знаю.Я нашел это в Google: http://snippets.dzone.com/posts/show/181.

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