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

嗯,突然開始工作,也許是一個緩存問題。 –