Как установить ActiveModel :: Base.include_root_in_json в false? - PullRequest
0 голосов
/ 17 июня 2010

Я использую Rails 3 с 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. По умолчанию это true."

Ответы [ 4 ]

8 голосов
/ 09 февраля 2011

Я знаю, что это старый, но еще один способ сделать это, поместив это в ваш класс приложения в 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
4 голосов
/ 20 октября 2010

Вы должны просто установить его для класса, который включает модули ActiveModel:

class Person
  include ActiveModel::Validations
  include ActiveModel::Serializers::JSON
  self.include_root_in_json = false

  ...
end
1 голос
/ 17 июня 2010
ActiveModel::Base.include_root_in_json = false

в инициализаторе ??

0 голосов
/ 18 ноября 2011

Если вы предпочитаете инициализаторы, это ActiveRecord::Base, а не ActiveModel::Base в Rails версий 2. * и 3.1, возможно, 3.0. Посмотрел источник, и в бета-версии 3.0 он был переключен на ActiveModel, но снова вернулся к ActiveRecord.

ActiveRecord::Base.include_root_in_json = false

Также, если вы действительно пытаетесь использовать эту функциональность, в Rails 3.1 релевантная оболочка params имеет значение:

ActionController :: ParamsWrapper

Включает хэш параметров во вложенный хэш. Это позволит клиентам отправлять запросы POST без указания корневых элементов.

http://edgeapi.rubyonrails.org/classes/ActionController/ParamsWrapper.html

...