2013-03-11 66 views
10

嗨我使用Active模式串行製作根節點串行

[ 
    { 
    "contact" : {} 
    }, 
    { 
    "contact" : {} 
    } 
] 

具有這種格式的JSON在我的Rails應用程序的數組如何讓這個我刪除上述節點的一個水平接觸使用主動模式串行這樣的:

[ 
{ 
}, 
{ 
} 
] 

我也想刪除節點名稱「接觸」

回答

24

這渾身RailsCast #409 Active Model Serializers

爲了刪除根節點,您在控制器中調用render時添加了root: false。假設你contact S IN JSON來自contacts#index方法,你的代碼可能看起來像:

def index 
    @contacts = Contacts.all 
    respond_to do |format| 
    format.html 
    format.json { render json: @contacts, root: false } 
    end 
end 

或者,如果你不想在你的任何JSON的任何根節點,在你ApplicationController,添加以下方法:

def default_serializer_options 
    {root: false} 
end 
+0

我其實有這樣的設置。我想我沒有正確解釋。該對象具有包含聯繫人對象的屬性列表,並且我隱藏了所有其他屬性。我只想讓聯繫人對象成爲根。 – Madhan 2013-03-12 16:17:01

5

通常情況下,如果我沒有錯,默認根節點的控制器名稱是默認的。

format.json { render json: @contacts} 

當然,您需要刪除root false,它會刪除節點的名稱。

如果你想作爲根對象使用與這個:

format.json { render json :@contacts, :root => 'contact' } 
4

/config/initializers/serializer.rb

ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes` 

默認ActiveModelSerializers將使用屬性適配器(否 JSON root)。但我們強烈建議您使用jsonapi.org/format中指定格式的JsonApi適配器,其中 遵循1.0

2

對於加載ActiveModel使用串行::人v0.10.x,你將需要創建一個初始化,包括以下內容:

# config/initializers/serializer.rb 
ActiveModelSerializers.config.adapter = :json 
ActiveModelSerializers.config.json_include_toplevel_object = true 

然後,只需重新啓動應用程序,你應該得到的根你渴望的物體。

這適用於Rails 5.1.x.因人而異。 HTH。