11 Stimmen

Wie kann man die Methode "as_json" oder "to_json" außer Kraft setzen, um "respond_to" zu verwenden, ohne bestimmte Informationen einzuschließen?

Ich verwende Ruby on Rails 3 und ich möchte überschreiben (möglicherweise in der Modelldatei) die as_json o to_json Methode, um respond_to eine HTTP-Anfrage, ohne einige Informationen zu enthalten.

In meinem Konto Modell Ich habe

def as_json(options = {})
  super(
    :except => [
      :password
    ]
  )
end

In meinem Controller habe ich

format.json {
  render :json => @account, :status => 200
}

Wenn ich eine Anfrage stelle, zum Beispiel an /account/1.json Ich habe auch die Passwortattribute zurück, die ich aus Sicherheitsgründen nicht haben möchte.

Also, Wie kann ich verhindern, dass bestimmte Informationen aufgenommen werden?


Ich kann dies tun und es funktioniert

format.json {
  render :json => @account.to_json(:except => [:password]), :status => 200
}

aber ich muss es tun Refactor .

16voto

tommasop Punkte 17995

Wenn es nur in einer Aktion ist, können Sie es versuchen:

format.json { render :json => @account, :except => :password }

wenn Sie es für mehr als eine Aktion benötigen, wäre die Überschreibung besser:

# Exclude password info from json output.
def to_json(options={})
  options[:except] ||= :password
  super
end 

dasselbe gilt für as_json

# Exclude password info from json output.
def as_json(options={})
  options[:except] ||= :password
  super
end

1voto

Alanoud Just Punkte 309

Die beste Lösung ist die Überschreibung von as_json Methoden in Ihrem Modell wie folgt:

def as_json options={}
   super(
     include: {ADD THE RELATIONS YOU WANT TO INCLUDE}).merge({YOU CAN MERGE EXTRA PARAMETER HERE})
end

Sie könnten verwenden sólo (was bedeutet, dass die einzigen Parameter, die Sie aufgeführt haben, zurückgegeben werden) oder verwenden Sie außer (was bedeutet, dass alle Parameter außer den aufgeführten zurückgegeben werden).

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