2017-08-25 85 views
0

我希望能夠自定義在主動模型序列化JSON API使用適配器使用的ID。如何使用活動模型串行器自定義json-api序列化模型的ID?

即,我有其中被序列化不被認爲是面向公衆的各種原因的實際紅寶石上軌道的ID用於特定模型的一個項目,但可替換的面向公衆的唯一標識符是可用的。

我想利用這個標識符作爲ID爲JSON API序列化的內容,但我一直無法找出任何明顯的方法來覆蓋JSON API使用串行內的ID。

基本上,給出模型[{ id: 1, alt_id: '2aef7e'}, { id: 2, alt_id: '3b47c0' } ...]我想一個方法來創建一個序列化版本:代替

{ 
"data": 
    [{ 
    "id" : "2aef7e", 
    "type" : "my-model", 
    "attributes" : {...}, 
    "relationships" : {...} 
    },{ 
    "id" : "3b47c0", 
    "type" : "my-model", 
    "attributes" : {...}, 
    "relationships" : {...} 
    }], 
"included" : [ ... ] 
} 

{ 
"data": 
    [{ 
    "id" : "1", 
    "type" : "my-model", 
    "attributes" : {...}, 
    "relationships" : {...} 
    },{ 
    "id" : "2", 
    "type" : "my-model", 
    "attributes" : {...}, 
    "relationships" : {...} 
    }], 
"included" : [ ... ] 
} 

但一直未能找到重寫的明顯的方法序列化的ID值。

+0

(爲什麼'屬性:id do ...'不工作?) – dgsan

回答

0

您可以定義序列化中的一個方法,以避免使用對象的方法。

class MySerializer < ActiveModel::Serializer 
    attribute :id 
    def id 
    object.alt_id 
    end 
end 
+0

因此,對於我沒有仔細閱讀文檔?儘管我仍然好奇爲什麼在某些示例中使用塊('attribute(:name){'value'}')對':id'特別不適用。 – dgsan

相關問題