Вопрос

Я использую 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top