0

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 の最上位の動作を制御します。デフォルトでは true です。」

4

4 に答える 4

8

これが古いことは承知していますが、これを行う別の方法は、これを 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
于 2011-02-09T16:54:11.430 に答える
4

ActiveModel モジュールを含むクラスに設定するだけです。

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

  ...
end
于 2010-10-19T21:51:39.507 に答える
1
ActiveModel::Base.include_root_in_json = false

イニシャライザで??

于 2010-06-17T05:25:30.597 に答える
0

初期化子を好む場合は、Railsバージョン2. *および3.1、場合によっては3.0ではありActiveRecord::Baseません。ActiveModel::Baseソースを調べたところ、3.0ベータ版ではActiveModelに切り替えられましたが、ある時点で再びActiveRecordに戻りました。

ActiveRecord::Base.include_root_in_json = false

また、実際にこの機能を使用しようとしている場合、Rails3.1ではparamsラッパーが関連しています。

ActionController :: ParamsWrapper

パラメータハッシュをネストされたハッシュにラップします。これにより、クライアントはルート要素を指定せずにPOSTリクエストを送信できます。

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

于 2011-11-18T09:47:53.287 に答える