我們的業務要求是所有JSON響應看起來像這樣一致的JSON對象:如何使用Rabl的延伸和/諧音產生跨模型
{ "status": "ok"
"page": "1",
"perPage: "20",
"totalPages": "3",
"totalRecords": "54",
"records": [ { "id": 1234, "name": "Lorem ipsum } ] }
換句話說,響應的肉一組「記錄」,但它需要用狀態,分頁屬性等來包裝。我想用RABL來生成它。有沒有一種方法可以使用擴展或部分以乾的方式在我的所有對象上構建此結構?
我很樂意做這樣的事情:
應用程序/視圖/部件/ index.rabl
collection @widgets, :object_root => false
attributes :id, :name
extends "layouts/base" , :locals => { results: @widgets }
應用程序/視圖/佈局/ base.rabl
node(:status) { 'ok' }
node(:pages) { @results.total_pages }
app/controllers/widgets_controller.rb
def index
@widgets = Widget.paginate(page: params[:page])
end
這不起作用。
爲了澄清,我想設置一個本地的@results,然後我可以在包裝內使用。
然後,如果我想JSON-IFY另一個對象,我可以這樣做:
應用程序/視圖/水果/ index.rabl
collection @fruits, :object_root => false
attributes :id, :flavor
extends "layouts/base" , :locals => { results: @fruits }
應用程序/控制器/ fruits_controller。 rb
def index
@fruits = Fruit.paginate(page: params[:page])
end
而且,不需要修改layouts/base,顯然。
我很樂意使用「純」RABL解決方案,但這很好,因爲我可以在以後重構它。謝謝。我將暫緩接受這一點作爲答案。 – xrd
啊哈 - 我遇到了這個答案,並認爲「我的代碼看起來非常熟悉」。必須有一位偉大的作家;) –