Rails wrap_parameters против 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, он не будет включать корневой узел (т.е. users => {: name => 'John'}, скорее это будет просто {: name => 'Джон'}

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

Ответы на вопрос(1)

Решение Вопроса

include_root_in_json должен обернуть json, созданный в Rails

wrap_parameters обернуть JSON, полученный из запроса.

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

{name: 'John Smith'}

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

{"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'}

 Ka Mok07 янв. 2018 г., 22:02
Так вот что он делает. Почему это по умолчанию включено? Должен быть выключен, если делатьrails new my-app --api

Ваш ответ на вопрос