如何在json渲染中获取完整的belongs_to对象?

时间:2011-09-21 20:17:46

标签: ruby-on-rails ruby

基本上,我有一个对象belongs_to:companies,并且具有:company_id属性。当我渲染json:@ coupons时,JSON是否可以包含其所有者的属性而不是company_id?

3 个答案:

答案 0 :(得分:11)

你可能会做render :json => @coupons.to_json(:include => :company)这样的事情,至少它似乎与我在rails 2.3.8中的初始测试一起工作。

回答已修改为使用:include => :company而不是:include => :companies

答案 1 :(得分:3)

如果您需要尽可能保持json的紧凑性,最好使用自定义模型方法仅返回所需的数据。我最终向父模型添加了自定义as_json方法,并使用methods选项返回相关对象数据的子集。使用include将包含相关模型的完整json序列化。

def as_json(options={})
  super(
    :only => [:id, :name],
    :methods => [
      :organization_type_name,
    ]
  )
end

def organization_type_name
  self.organization_type.name
end

答案 2 :(得分:0)

首先,您的约定是错误的。

应为

//在coupon.rb

belongs_to :company

在渲染对象时执行此操作

render json: @coupon.as_json(include: :company)