2 Stimmen

Array von ActiveRecords zu JSON

Mir ist bekannt, dass ActiveRecord eine to_json-Methode bereitstellt, mit der Felder aus der JSON-Ausgabe gefiltert werden können, indem :only und :except verwendet werden.

Derzeit verwende ich das Folgende, um ein Array aus einer Suche als JSON zu formatieren:

@customers = Customer.find(:all)
...
format.js { render :json => @customers}

Wie kann ich die Felder auswählen, die in den Objekten im Array ausgegeben werden sollen? Gibt es eine Abkürzung oder muss ich das von Hand machen?

Zum Wohl, Adam

3voto

Scott Punkte 654

Ich glaube, Sie haben Ihre eigene Frage beantwortet. Mit Rails 2.3.x können Sie das Folgende verwenden:

@customers = Customer.all #Shortcut for to Customer.find(:all)
respond_to do |format|
  format.js { render :json => @customers.to_json(:only=>[:column_one, :column_two]}
end

2voto

Arrel Punkte 13370

Sie können die to_json-Methode der Modellklasse überschreiben, wenn Sie die Änderung global für das Modell anwenden möchten.

Um z.B. Nullwerte aus dem gerenderten JSON auszuschließen, könnte man die ursprüngliche ActiveRecord-Methode to_json überschreiben

  def to_json(options)
    hash = Serializer.new(self, options).serializable_record
    hash = { self.class.model_name => hash } if include_root_in_json
    ActiveSupport::JSON.encode(hash)
  end

damit in Ihrer Modellklasse:

  def to_json(options)
    hash = Serializer.new(self, options).serializable_record.reject {|key, value| value.nil? }
    hash = { self.class.model_name => hash } if include_root_in_json
    ActiveSupport::JSON.encode(hash)
  end

1voto

alex.zherdev Punkte 23460

Wenn Sie einen Blick in die ActionController::Base-Klasse werfen, werden Sie sehen, dass sie to_json sofort auf Ihre Sammlung aufruft (keine zusätzlichen Optionen verwendet), so müssen Sie es bereits vorbereitet haben. Wenn Sie also in Ihrer Aktion die Attribute, die nicht in json gerendert werden, nicht verwenden, können Sie Ihre Suche ersetzen durch

@customers = Customer.find(:all, :select => ["id", ...])

und wählen Sie nur die aus, die Sie benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X