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

时间:2013-03-27 02:49:52

标签: ruby-on-rails ruby-on-rails-3 one-to-many restful-architecture rabl

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

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

class Customer < ActiveRecord::Base
  has_many :accounts
end

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

在我的兔子中,我有以下内容:

#index.rabl (for listing all customers)
collection :@customers
extends "customers/_customer"

#edit.rabl (for editing a single customer)
object :@customer
extends "customer/_customer"

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

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

if @include_accounts
  child :accounts do
    extends "accounts/_account"
  end
end

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

1 个答案:

答案 0 :(得分:3)

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