Ruby on rails 轨道对象关系&;JSON呈现

Ruby on rails 轨道对象关系&;JSON呈现,ruby-on-rails,ruby,ruby-on-rails-3,json,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Json,Activerecord,我已经知道如何在JSON呈现中包含has_many&has_one关系。我甚至知道这样做时如何排除某些属性。对于那些不知道的人,这里有一个好帖子: 但是,我不知道如何让它在子对象上使用as_json,这样我就不必在每个父关系上重新声明它 所以如果我有这样的东西 class Customer < ActiveRecord::Base has_many :orders def as_json(options={ }) super({ :except => :Passw

我已经知道如何在JSON呈现中包含has_many&has_one关系。我甚至知道这样做时如何排除某些属性。对于那些不知道的人,这里有一个好帖子:

但是,我不知道如何让它在子对象上使用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
class客户:Password,:include=>[:orders]}.merge(选项))
结束
结束
类顺序[:customer]}.merge(选项))
结束
结束
当您从订单角度查看客户密码时,它最终会发回客户密码

理想情况下,我希望它遵循模型中定义的as_json规则,这样我就不必在每个子对象上都包含:customer


附言——这只是一个例子,不是真实世界的情景

我鼓励您在所有模型中使用RABL gem而不是将
重写为_json
。只使用所需的参数/关系来定义JSON响应要容易得多。您还可以轻松创建父/子嵌套


如何使用rabl动态更改输出?有时我想根据请求数据的人来更改json中返回的内容。您使用与通常相同的Ruby语法(即
if
,除非
语句等)。