1

我在Rails項目中使用ActiveModel串行器。使用ActiveModel Serializer呈現對象的子集

對象的默認序列化程序相當大,並且在API響應中嵌套對象會導致相當大的JSON對象。

有時,我想嵌入一個對象,但只需要JSON中存在的對象屬性的一小部分。

很顯然,我可以做這樣的事情:

render json: @user, serializer: SmallerUserSerializer

但這樣會導致大量的重複。

是否有一個選項可以傳遞給序列化程序,以便它只包含序列化程序屬性的子集?例如:

class BlogSerializer # This is pseudocode. Does not actually work. has_one :user, only_show: [:user_id, :profile_url] end

回答

0

創建方法和用戶對象上調用to_json。然後將該方法名稱添加到屬性列表中。該方法也可以稱爲用戶。

class BlogSerializer 
    attributes :id, :user 

    def user 
    object.user.to_json(only: [ :id, :profile_url ]) 
    end 
end 
0

創建一個方法,並調用to_json用戶對象上。然後將該方法名稱添加到屬性列表中。該方法也可以稱爲用戶。

class BlogSerializer 
    require 'json' 
    attributes :id, :user 

    def user 
    JSON.parse "#{object.user.to_json(only: [ :id, :profile_url ])}" 
    end 
end 
相關問題