26

新しい Rails 3.2 アプリでは、config/initializers/wrap_parameters.rb に次の行があります。

ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end

2 番目のコード ブロックに対する私の理解では、オブジェクトを json に変換すると、ルート ノードは含まれず (つまり、users => {:name => 'John'} ではなく、単に {:name => ' になります)。ジョン'}

では、最初の wrap_parameters ブロックは何をするのでしょうか? それはaction_controllerに作用します..なぜですか?

4

1 に答える 1

67

include_root_in_jsonRailsでインスタンス化されたjsonをラップすることです

wrap_parametersリクエストから受け取ったjsonをラップすることです。

wrap_parameters有効にしていて、POST コマンドを介して次の json を Rails に送信した場合:

{name: 'John Smith'}

Rails は、受け取った JSON を次のように自動的にラップします。

{"person": {name: 'John Smith'}}

include_root_in_json一方、Railsがオブジェクトから生成to_jsonする json がコマンドによってラップされているかどうかです。


例えばPerson.to_json。が有効になっている場合include_root_in_jsonは、次のようになります。

{"person": {name: 'James Brown'}}

そうでなければ、あなたはただ得るでしょう

{name: 'John Smith'}

于 2012-05-27T16:38:34.813 に答える