2013-07-29 32 views
0

我在使用ActiveRecordSerializer進行序列化的Rails上構建了一個API。當我想呈現我使用的資源列表時:在Ruby on Rails 4中實現分頁API

render json: @resources 

這會自動檢測到存在資源的序列化程序並使用它。

現在我想實現分頁,我的想法是有一個叫PaginatedResponse類,實例並呈現爲這樣的JSON:

render json: PaginatedResponse.new(@resources, <more meta information of the page>) 

的問題是,當我用這個,一切正常但是資源不是使用ActiveRecordSerializer呈現的,而是一個默認的序列化器。我懷疑這是因爲PaginatedResponse沒有擴展ActiveRecord。

任何線索我該如何解決這個問題?

回答

0

解決方案是在PaginatedResponse中包含ActiveModel :: SerializerSupport來指示應使用序列化器的ActiveRecordSerializer。

+1

我需要一個類似的解決方案,你可以發佈你的PaginatedResponse類和你使用的序列化器的一些代碼示例。我似乎無法弄清楚如何讓我的對象數組的根來反映我的資源類。謝謝 – utahtwo

0

Rails 4默認引入了一個新的概念jbuilder。因此,只需創建index.json.jbuilder並放入基於json syntex的代碼即可。只是參考下面的默認腳手架指數JSON的JBuilder,

json.array!(@users) do |user| 
    json.extract! user, :name, :email, :phone, :native_place 
    json.url user_url(user, format: :json) 
end 

這是使所有用戶都使用他的姓名,電話,native_place。 所以從你的代碼中刪除行

render json: @resources 

和實施新的JBuilder的概念。