Rails wrap_parameters vs include_root_in_json, в чем разница?

В новом приложении Rails 3.2 вы можете найти в config/initializers/wrap_parameters.rb следующие строки:

ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end

Мое понимание второго блока кода заключается в том, что если вы конвертируете объект в json, он не будет включать в себя root node (ie users = > {: name = > 'John'}, скорее это будет просто {: name = > 'john'}

Что делает первый блок wrap_parameters? Он действует на action_controller.. почему?

Ответ 1

include_root_in_json заключается в том, чтобы обернуть json, созданный в Rails

wrap_parameters - это перенос json, полученный от запроса.

Если у вас включен wrap_parameters, и если вы отправите следующий json через команду POST в Rails:

{name: 'John Smith'}

Rails автоматически переносит полученный JSON в:

{"person": {name: 'John Smith'}}

include_root_in_json, с другой стороны, заключается в том, завершается ли json Rails генерирует из объекта, а не через команду to_json.


например. Person.to_json. Если include_root_in_json включен, вы получите:

{"person": {name: 'James Brown'}}

В противном случае вы просто получите

{name: 'John Smith'}