有条件地包括具有RABL的子节点

Art*_*kel 6 ruby-on-rails one-to-many ruby-on-rails-3 restful-architecture rabl

当我使用rabl返回标准RESTful控制器方法的JSON时,我想我有一个非常基本的情况......

首先让我说我与父母和孩子有一个典型的一对多关系(假设客户和账户):

class Customer < ActiveRecord::Base
  has_many :accounts
end
Run Code Online (Sandbox Code Playgroud)

在我的客户控制器中,我有索引和编辑 - 索引,我只想返回所有客户(没有帐户),并编辑我想要返回特定客户的所有帐户.使用索引我不想为明显的性能(N + 1)原因返回帐户.

在我的兔子里,我有以下几点:

#index.rabl (for listing all customers)
collection :@customers
extends "customers/_customer"
Run Code Online (Sandbox Code Playgroud)

#edit.rabl (for editing a single customer)
object :@customer
extends "customer/_customer"
Run Code Online (Sandbox Code Playgroud)

我正在重复使用_customer.rabl进行索引和编辑.

#_customer.rabl
object :@customer
attributes :name, ......

if @include_accounts
  child :accounts do
    extends "accounts/_account"
  end
end
Run Code Online (Sandbox Code Playgroud)

我在我的编辑(控制器)中设置了@include_accounts而不是索引 - 但是这不起作用 - 实际上这里的实例var(@include_accounts)永远不会传递下来.实现这个的正确模式是什么?

Mar*_*dig 3

尽管rails-rabl gem 声称它更快,但我发现模板对于条件表达式并不那么灵活 - 请参阅 rabl-rails 自述文件:实例变量。