私たちのビジネス要件は、すべての JSON 応答が次のようになることです。
{ "status": "ok"
"page": "1",
"perPage: "20",
"totalPages": "3",
"totalRecords": "54",
"records": [ { "id": 1234, "name": "Lorem ipsum } ] }
言い換えれば、応答の要は「レコード」のセットですが、ステータス、ページング属性などでラップする必要があります。RABL を使用してこれを生成したいと思います。拡張またはパーシャルを使用して、すべてのオブジェクトにわたってこの構造を DRY 方法で構築する方法はありますか?
私はこのようなことをしたいと思います:
アプリ/ビュー/ウィジェット/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 化する場合は、次のようにします。
アプリ/ビュー/フルーツ/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
そして、明らかに、レイアウト/ベースを変更する必要はありません。