2010-04-02 26 views
9

Se faccio qualcosa di simile:Come convertire record tra cui 'sono' associazioni a JSON

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

allora esso stampa solo i dati appuntamento e non i dati del personale associati. Se risultato [0] .staff.inpsect, ho ovviamente i dati dello staff.

Il problema è che voglio restituirlo a AJAX come JSON, comprese le righe del rigo. Come faccio a forzare l'inclusione delle righe del pentagramma, o devo passare in rassegna e creare qualcosa manualmente?

risposta

21

:include è un argomento per to_json, non find. Quello che dovete fare nel vostro controller è questo:

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

è necessario impostare un'associazione tra Nomina e del personale per far funzionare tutto questo.

+5

: include è un argomento per ActiveRecord :: Base # find e ActiveRecord :: Serialization # to_json. Fanno cose diverse: #find (: include) carica i dati associati in una o più query SQL, invece delle temute query N + 1. #to_json (: include) contrassegna una o più associazioni da includere nell'oggetto JSON restituito. #to_xml si comporta allo stesso modo. –

+0

@AlexKorban grazie! se il personale ha un genitore che vuoi includere nel JSON, come lo includeresti? Fondamentalmente voglio ottenere:'@appointment.staff.manager.name – BKSpurgeon

1

Partenza ActiveRecord::Serialization e ActionController::Base (vedere la sezione: "Rendering 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 
Problemi correlati