2010-04-02 6 views
9

Wenn ich etwas tun:Wie konvertiert Datensätze einschließlich 'umfassen Verbände zu JSON

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

dann nur er druckt die Termindaten aus, und nicht die damit verbundenen Personaldaten. Wenn ich [0] .staff.inpect erhalte, dann bekomme ich natürlich die Personaldaten.

Das Problem ist, ich möchte dies zu AJAX als JSON, einschließlich der Mitarbeiter Zeilen. Wie erzwinge ich, dass die Belegzeilen einbezogen werden, oder muss ich manuell durchgehen und etwas erstellen?

Antwort

21

:include ist ein Argument für to_json, nicht find. Was Sie brauchen in Ihrem Controller zu tun, ist dies:

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

Sie benötigen einen Zusammenhang zwischen Bestellung und Mitarbeiter für das Setup zu arbeiten.

+5

: include ist ein Argument für ActiveRecord :: Base # find und ActiveRecord :: Serialization # to_json. Sie machen verschiedene Dinge: #find (: include) lädt die zugehörigen Daten in eine oder mehrere SQL-Abfragen anstelle der gefürchteten N + 1-Abfragen. #to_json (: include) markiert eine oder mehrere Assoziationen für die Aufnahme in das zurückgegebene JSON-Objekt. #to_xml verhält sich genauso. –

+0

@AlexKorban danke! Wenn Mitarbeiter in ähnlicher Weise einen Elternteil haben, den Sie in den JSON aufnehmen möchten, wie würden Sie das einschließen? Grundsätzlich möchte ich:'@appointment.staff.manager.name – BKSpurgeon

1

Check out ActiveRecord::Serialization und ActionController::Base (siehe Abschnitt: "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 
Verwandte Themen