Как я могу установить для include_root_in_json значение false для всех моих моделей RoR? - PullRequest
17 голосов
/ 10 декабря 2010

Как я могу установить для include_root_in_json значение false для всех моих моделей RoR?

Я пытался установить ActiveModel :: Base.include_root_in_json = false внутри application.rb, но это не имеет никакого эффекта.

Ответы [ 6 ]

12 голосов
/ 10 декабря 2010

Метод Model.to_json используется для возврата строки JSON, представляющей модель, и я использовал self.include_root_in_json = false в самой модели.

Но для всего приложения вы можете попробовать установить ActiveModel :: Base.include_root_in_json = false в инициализаторе. [Edit Это не работает.]

[edit] ActiveRecord :: Base.include_root_in_json = true попробуйте добавить эту строку в файл config / environment.rb.

5 голосов
/ 10 декабря 2010

Я не уверен, верно ли это для более поздних версий rails, но для меня (при запуске 2.3.5 атм) уже было объявление для этого параметра в /config/initializers/new_rails_defaults.rb, где он был установлен на:

ActiveRecord::Base.include_root_in_json = true

Поэтому, если вы попытаетесь установить этот параметр в другом месте, он может быть переопределен.

2 голосов
/ 21 сентября 2012

На Rails 3.2.2 это уже установлено в инициализаторах:

--- config/initializers/wrap_parameters.rb ---

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end
1 голос
/ 06 июля 2011

Я думаю, вы должны установить ActiveRecord :: Base.include_root_in_json = false в config / application.rb

не ActiveModel :: Base

1 голос
/ 10 декабря 2010

Для общесистемной конфигурации по умолчанию всегда хорошая идея установить переменную в инициализаторах, например, config / initializer / defaults.rb

0 голосов
/ 14 ноября 2015

На Rails 4 в "config / initializers / wrap_elements.rb" вы можете раскомментировать следующее:

ActiveSupport.on_load(:active_record) do
 self.include_root_in_json = true
end 
...