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".

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top