13

我想送我的前端應用程序的JSON看起來像這樣:加載ActiveModel使用串行器::包括兩個父JSON數組

{ 
    facilities: [ 
    {id: 5, name: 'happy days ranch', location: { address: '1424 Pastoral Lane', zipcode: '25245'}, instructor_ids: [2, 4, 9]} 
    ], 
    instructors: [ 
    {id: 4, name: 'Johnny Pheonix', skill: '8', picture: 'aws_url', facility_ids: [5, 8, 12} 
    ] 
} 

事情我已經試過

render :json => @facilities 

的序列化程序發現這一點。好極了!但是,這並不包括任何教練

render :json => {facilities: @facilities, instructors: @instructors} 

這給了我一個教練陣列和陣列的設施,但沒有使用activemodel的串行器::。

render :json => [@facilities, @instructors] 

起初我對這個很興奮,因爲它給了我兩個數組,它使用了ActiveModel :: Serializers。然而,這就是JSON的樣子:

{facilities: [ 
    {facilities: [ 
    #my facilities data 
    ]}, 
    {facilities: [ 
    #my instructor data 
    ]} 
]} 

是什麼我試圖做甚至允許由ActiveModel :: Serializers?如果是這樣,怎麼樣?

非常感謝!

回答

20

我通過創建一個類調用搜索併入加載ActiveModel的

方面
class Search 
    include ActiveModel::Serialization 
    include ActiveModel::SerializerSupport 

    attr_accessor :facilities, :instructors 

    def initialize(facilities, instructors) 
    @facilities, @instructors = facilities, instructors 
    end 
end 

然後,我創建了一個搜索控制器(什麼有趣的存在)和搜索串行解決它。

class SearchSerializer < ActiveModel::Serializer 
    has_many :instructors, embed: :objects 
    has_many :facilities, embed: :objects 
end 

這造成我的期望JSON,雖然現在它被包裹在一個搜索哈希:

{search: { 
    #the stuff I wanted 
}} 
+0

這與我的問題完全相同。謝謝你的回答! – 2013-07-20 20:44:32

+2

謝謝你的解決方案。它可以工作,並且可以通過在渲染器中設置「root:false」來禁用根節點「搜索」。經過審查,我們決定不使用這種方法和2個根元素,我們最終使用了2個獨立的API端點,這使我們的設計更簡單。 – 2014-03-05 18:22:41

7

這是我的解決方案:

render json: { 
    facilities: ActiveModel::ArraySerializer.new(@facilities, each_serializer: FacilitySerializer, root: false), 
    instructors: ActiveModel::ArraySerializer.new(@instructors, each_serializer: InstructorSerializer, root: false) 
} 

這是一個有點髒。它基本上實例化將被實例化的內容,除了手動和兩次。兩個結果集都以正確的格式使用ActiveModel :: Serializer進行呈現。

+1

由於最近對active_model_serializers進行了更新,因此此解決方案不再有效。應用程序應提出兩個獨立的請求 – kequc 2014-11-13 15:19:48

+0

我只是好奇,根據你的評論,爲什麼這不再有效?我正在使用最新版本,並且一切運行順利。 – David 2015-11-20 18:43:33

+0

自從發佈這個解決方案後,我學到了爲什麼以鏈接形式提供大量附加信息非常重要。不幸的是,我無法破譯我當時正在談論的內容,與你一樣。我很抱歉沒有更加詳細,將來會更加如此。我認爲它與activemodel serialisers期望輸出的外觀以及與某些外部庫不兼容有關。如果您只需要原始輸出,則此解決方案可能仍然有效。 – kequc 2015-11-23 18:27:45

相關問題