【发布时间】:2013-06-12 06:28:14
【问题描述】:
我们的业务要求是所有 JSON 响应看起来像这样:
{ "status": "ok"
"page": "1",
"perPage: "20",
"totalPages": "3",
"totalRecords": "54",
"records": [ { "id": 1234, "name": "Lorem ipsum } ] }
换句话说,响应的主体是一组“记录”,但它需要用状态、分页属性等进行包装。我想使用 RABL 来生成它。有没有办法使用 extends 或 partial 以 DRY 方式在我的所有对象中构建这个结构?
我很想做这样的事情:
app/views/widgets/index.rabl
collection @widgets, :object_root => false
attributes :id, :name
extends "layouts/base" , :locals => { results: @widgets }
app/views/layouts/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 化另一个对象,我可以这样做:
app/views/fruits/index.rabl
collection @fruits, :object_root => false
attributes :id, :flavor
extends "layouts/base" , :locals => { results: @fruits }
app/controllers/fruits_controller.rb
def index
@fruits = Fruit.paginate( page: params[:page] )
end
而且,显然不需要修改布局/基础。
【问题讨论】:
标签: ruby-on-rails json rabl