1

在一个标准的Rails控制器的末端有:添加在JSON输出嵌套字段中的Rails控制器

respond_to do |format| 
    format.html 
    format.json { render json: @cars } 
end 

按预期工作。除JSON不具备的@cars协会:

class Car < ActiveRecord::Base 
    attr_accessible :model, :color 
    belongs_to :manufacturer 
end 

的JSON没有制造商的领域。我如何让JSON获得这些?有什么我添加到belongs_to电话?有没有一种方法可以将它添加到从format.json创建的对象?

回答

2

默认情况下,as_json,方法,是将对象转换为JSON,包括所有属性。但manufacturer是一种方法。

您可以指示as_json将制造商纳入选项:methods,请参阅api doc

所以你Car模型可以像厕所

class Car < ActiveRecord::Base 
    belongs_to :manufacturer 

    def as_json(options={}) 
    super(options.merge methods: :manufacturer_json) 
    end 

    def manufacturer_json 
    manufacturer.as_json 
    end 
end 

,包括制造商。

+0

这回答我的问题,但适用于所有'汽车'。有没有办法只为一个特定的控制器做到这一点? –

+0

不适合我,我没有看到任何额外的领域。我从'manufacturer_json'返回'{name:'abcdef'}。as_json'。但是JSON和以前一样,没有'name'字段。 –

+0

嗯,突然开始工作,也许是一个缓存问题。 –