1

Rails 4 上で新しいアプリを開始しましたが、JSON レンダリングがデフォルトでどのように実装されているかについて重大な変更のように見えることに気付きましたが、どこにも書かれていないので、誰かが私に洞察を与えることができるかどうか疑問に思っていました(1)APIが実際に変更されたかどうか、(2)必要な動作(つまり、古い動作)を取得する方法について。

特に、私が見ているのは、Rails 3 のどこにあるのかということです。

@answer.as_json

...戻ってきます...

{
  id: 1,
  body: "lorem ipsum..."
  ....
}

Rails 4 では、同じメソッドが返されているようです:

{
  'answer':
    {
      id: 1,
      body: "lorem ipsum..."
      ...
    }
}

この動作が変更されたことを他の誰かが確認できますか? すべてのモデルで as_json をオーバーライドする以外に、古い動作を元に戻す方法はありますか?

この新しい実装により、複数のモデルを含む JSON 応答を返すのがより面倒になっています (現在は、コントローラー アクションの "render :json ..." 呼び出しでハッシュ マージを使用するか、as_json をオーバーライドする必要があります)。

4

1 に答える 1

5

ActiveRecord::Base.include_root_in_jsonメソッドの最上位の動作を制御するオプションがありますas_json。名前は自明だと思います。

API の重大な変更について: ソースを掘り下げると、このオプションのデフォルト値が Rails 4.0.0.beta1 で変更されたtrueことがわかりますが、後で Rails 4.0.0.rc1に戻されfalseまし

JSON にルート ノードが含まれないようにする場合は、次のようinclude_root_in_jsonにオプションを指定しますconfig/initializers/wrap_parameters.rb

ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end
于 2013-05-18T20:50:28.237 に答える