我们的业务要求是所有 JSON 响应看起来像这样:
{ "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 }
应用程序/控制器/widgets_controller.rb
def index
@widgets = Widget.paginate( page: params[:page] )
end
这不能按原样工作。
为了澄清,我想将一个本地设置为@results,然后我可以在包装器中使用它。
然后,如果我想 JSON 化另一个对象,我可以执行以下操作:
应用程序/视图/水果/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
而且,显然不需要修改布局/基础。