2012-05-27 39 views
23

在一個新的Rails應用程序3.2,你可以在配置/初始化/ wrap_parameters.rb以下行發現:Rails wrap_parameters vs include_root_in_json,有什麼區別?

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 

我的第二個代碼塊的理解是,如果轉換一個目的是JSON,也不會包含一個根節點(即用戶=> {:name =>'John'},而不是它{}}, ..爲什麼?

回答

63

include_root_in_json是包裝json在Rails中實例化的

wrap_parameters是包裝來自請求的json。

如果你有wrap_parameters啓用,如果你通過一個POST命令發送以下JSON來的Rails:

{name: 'John Smith'}

Rails會自動將它包裝收到成JSON:

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

include_root_in_json另一方面,是否是json Rails 從對象生成被包裝或不通過to_json命令。


例如, Person.to_json。如果include_root_in_json啓用,您將獲得:

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

否則,你只是得到

{name: 'John Smith'}

+0

感謝隊友,非常清晰。 – Inc1982

+0

所以這就是它所做的。爲什麼這是默認的?應該關閉,如果做'rails new my-app --api' –

相關問題