Как установить ActiveModel :: Base.include_root_in_json до false?
-
28-09-2019 - |
Вопрос
Я использую Rails 3 W / Mongoid (так что нет Activerecord). Mongoid использует метод ActiveModel «To_json», и по умолчанию этот метод включает в себя корневой объект в JSON (который я не хочу).
Я пытался положить это в инициализатор:
ActiveModel::Base.include_root_in_json = false
Но получите ошибку
uninitialized constant ActiveModel::Base
Любые идеи, как я могу изменить это? Я изменил по умолчанию непосредственно в исходный код, и он работал нормально, но, очевидно, я хотел бы сделать это правильно.
Переменная определяется в верхней части этого файла:Github - ActiveModel / lib / active_model / serializers / json.rb
Из документов: «Опция ActiveModel :: Base.include_root_in_json контролирует поведение верхнего уровня to_json. Это верно по умолчанию».
Решение
ActiveModel::Base.include_root_in_json = false
В инициализатор ??
Другие советы
Я знаю, что это старое, но другой способ сделать это, это поместив это в вашем классе приложений в Application.RB:
# When JSON-encoding a record, don't wrap the attributes in a hash where the
# key is named after the model
config.active_record.include_root_in_json = false
Вы должны просто установить его в классе, который включает в себя модули ActiveModel:
class Person
include ActiveModel::Validations
include ActiveModel::Serializers::JSON
self.include_root_in_json = false
...
end
Если вы предпочитаете инициализаторы, это ActiveRecord::Base
, нет ActiveModel::Base
В версиях Rails 2. * и 3.1, возможно, 3,0. Просмотрел источник, а в 3.0 бета был переключен на ActiveModel, но снова обратно в ActiveRecord в какой-то момент.
ActiveRecord::Base.include_root_in_json = false
Кроме того, если вы на самом деле пытаетесь использовать эту функциональность, в Rails 3.1 Парный оболочкой имеет отношение:
ActionController :: Parmswrapper
Обернуты параметры хэш в вложенный хэш. Это позволит клиентам представить почтовые запросы без необходимости указывать какие-либо корневые элементы.
http://edgeapi.rubyonrails.org/Classes/actionController/Paramswrapper.html.html.