2011-12-27 98 views
3

我已经知道如何将has_many & has_one关系的关系包含到我的JSON呈现中。我甚至知道如何排除某些属性。对于那些不知道这里是一个很好的职位:轨道对象关系&JSON渲染

Rails Object Relationships and JSON Rendering

不过,我不知道该怎么做是有它使用as_json子对象,所以我不必重新声明它对每一个父母的关系。

所以,如果我有这样的事情......

class Customer < ActiveRecord::Base 
    has_many :orders 

    def as_json(options={ }) 
    super({ :except => :Password, :include => [:orders] }.merge(options)) 
    end 
end 

class Order < ActiveRecord::Base 
    has_one :customer 

    def as_json(options={ }) 
    super({ :include => [:customer] }.merge(options)) 
    end 
end 

它结束了发送回客户密码,当您从订单角度看待它。

理想情况下,我希望它遵循模型中定义的as_json的规则,所以我不必在每个子对象中包含以下内容的异常:customer。

P.S. - 这只是一个不是真实世界场景的例子。

回答

2

我鼓励您使用RABL宝石,而不是覆盖所有型号的as_json。仅使用您想要的参数/关系来定义您的JSON响应就容易多了。您还可以轻松创建父/子嵌套。

https://github.com/nesquena/rabl

+0

如何使用rabl动态更改输出?有时我想根据谁在请求数据来更改json中返回的内容。 – Altonymous 2011-12-27 22:34:47

+0

您可以像平常一样使用相同的Ruby语法(例如'if'和'unless'语句等)。 – iwasrobbed 2011-12-27 22:52:20