2015-01-30 7 views
2

У меня есть следующие параметры JSON.Как получить доступ к JSON в Rails?

Started POST "/tickets/move.json" for ::1 at 2015-01-30 15:30:13 -0600 
Processing by TicketsController#move as JSON 
    Parameters: {"_json"=>[{"id"=>"1", "col"=>1, "row"=>1}, {"id"=>"2", "col"=>2, "row"=>2}, {"id"=>"3", "col"=>2, "row"=>1}, {"id"=>"4", "col"=>4, "row"=>1}, {"id"=>"5", "col"=>5, "row"=>1}], "ticket"=>{}} 

Как я могу получить к ним доступ, как и с обычными параметрами рельсов?

ответ

4

Это обычный params хэш. Rails обычно достаточно умный, чтобы декодировать запрос JSON и поместить полученный объект в params для вас, а листы (=>) - это мертвая распродажа, что это хаб Ruby, а не JSON. Отформатирован более красиво это выглядит следующим образом:

{ "_json" => [ { "id" => "1", "col" => 1, "row" => 1 }, 
       { "id" => "2", "col" => 2, "row" => 2 }, 
       # ... 
       ], 
    "ticket" => {} 
} 

Вы получить доступ к нему, как и любой другой Hash:

p params["_json"] 
# => [ {"id"=>"1", "col"=>1, "row"=>1}, 
#  {"id"=>"2", "col"=>2, "row"=>2}, 
#  ... 
# ] 

p params["_json"][0] 
# => {"id"=>"1", "col"=>1, "row"=>1} 

p params["_json"][0]["id"] 
# => "1" 

p params["ticket"] 
# => {} 

Это должно быть HashWithIndifferentAccess, на самом деле, так что вы должны быть в состоянии использовать клавиши символов также:

p params[:_json][0][:id] 
# => "1" 
+0

Приятно, что Rails автоматически обрабатывает данные JSON и отображает его в объект. 'params [" _ json "]' работает отлично. –

Смежные вопросы