2010-04-02 103 views
9

如果我做這樣的事情:如何轉換記錄,包括「包括」協會JSON

result = Appointment.find(:all, :include => :staff) 
logger.debug { result.inspect } 

那麼它只能打印出預約數據,而不是相關的人員數據。 如果我做結果[0] .staff.inpsect然後我得到當然的人員數據。

問題是我想返回到AJAX作爲JSON,包括職員行。我如何強制它包含職員行,或者我必須循環並手動創建一些內容?

回答

21

:includeto_json,不find參數。你需要在你的控制器上做的是:

def return_json 
    @appointment = Appointment.find(:all) 
    respond_to { |format| 
    format.json { render :json => @appointment.to_json(:include => :staff) } 
    } 
end 

你需要在Appointment和Staff之間建立一個關聯才能工作。

+5

:include是ActiveRecord :: Base#find和ActiveRecord :: Serialization#to_json的參數。他們做了不同的事情:#find(:include)將關聯的數據加載到一個或多個SQL查詢中,而不是可怕的N + 1查詢。 #to_json(:include)將一個或多個關聯標記爲包含在返回的JSON對象中。 #to_xml的行爲方式相同。 – 2010-04-02 23:16:30

+0

@AlexKorban謝謝!如果工作人員同樣有一個你想包含在JSON中的父項,你會如何包含它?基本上我想得到:'@appointment.staff.manager.name – BKSpurgeon 2016-07-27 08:15:11

1

退房ActiveRecord::SerializationActionController::Base(參見: 「渲染JSON」)

def show 
    @appointment = Appointment.find(:all, :include => :staff) 
    respond_to do |format| 
    format.html 
    format.js { render :json => @appointment.to_json(:methods => [:staff]) } 
    end 
end