Como definir o ActiveModel :: base.include_root_in_json como false?
-
28-09-2019 - |
Pergunta
Estou usando o Rails 3 com mongóides (então nenhum ActiveRecord). O Mongoid usa o método "to_json" da ActiveModel e, por padrão, esse método inclui o objeto raiz no JSON (que eu não quero).
Eu tentei colocar isso em um inicializador:
ActiveModel::Base.include_root_in_json = false
Mas pegue o erro
uninitialized constant ActiveModel::Base
Alguma idéia de como posso mudar isso? Alterei o padrão diretamente no código de origem e funcionou bem, mas obviamente gostaria de fazê-lo corretamente.
A variável é definida na parte superior deste arquivo:Github - ActiveModel/lib/attive_model/Serializers/json.rb
Dos documentos: "A opção ActiveModel :: base.include_root_in_json controla o comportamento de nível superior de to_json. É verdade por padrão".
Solução
ActiveModel::Base.include_root_in_json = false
em um inicializador ??
Outras dicas
Eu sei que isso é antigo, mas de outra maneira que você pode fazer isso é colocando isso na sua classe de aplicativo no aplicativo.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
Você deve simplesmente defini -lo na aula que inclua os módulos ActiveModel:
class Person
include ActiveModel::Validations
include ActiveModel::Serializers::JSON
self.include_root_in_json = false
...
end
Se você preferir inicializadores, é ActiveRecord::Base
, não ActiveModel::Base
nas versões do Rails 2.* e 3.1, possivelmente 3,0. Olhou através da fonte e, no 3.0, a beta foi trocada para o ActiveModel, mas de volta ao ActiveRecord em algum momento.
ActiveRecord::Base.include_root_in_json = false
Além disso, caso você esteja realmente tentando usar essa funcionalidade, no Rails 3.1 o Wrapper Params é relevante:
ActionController :: ParamSwrapper
Envolve o hash dos parâmetros em um hash aninhado. Isso permitirá que os clientes enviem solicitações de postagem sem precisar especificar os elementos raiz.
http://edgeapi.rubyonrails.org/classes/actioncontroller/paramswrapper.html