铁路对象关系和JSON渲染

3

我已经知道如何将has_many和has_one关系包含在我的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. - 这只是一个例子,并非实际场景。

1个回答

2
我建议您使用RABL gem来代替覆盖所有模型的as_json。这样做更容易,只需要定义您想要的参数/关系即可定义JSON响应。您还可以轻松地创建父/子嵌套。 https://github.com/nesquena/rabl

你如何使用 rabl 动态更改输出?有时,我想根据请求数据的人更改返回的 json 内容。 - Altonymous
你可以像平常一样使用相同的 Ruby 语法(例如 ifunless 语句等)。 - iwasrobbed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接