Aktualisieren:
Dieses Problem wurde nicht richtig untersucht. Das eigentliche Problem liegt in render :json
.
Das erste Einfügen von Code in die ursprüngliche Frage liefert das erwartete Ergebnis. Es gibt jedoch immer noch eine Einschränkung. Siehe dieses Beispiel:
render :json => current_user
ist NICHT das gleiche wie
render :json => current_user.to_json
Das heißt, render :json
die to_json
dem Benutzerobjekt zugeordnete Methode wird nicht automatisch aufgerufen . In der Tat , wenn to_json
auf der überschrieben wird User
Modell render :json => @user
generiert die ArgumentError
unten beschrieben.
Zusammenfassung
# works if User#to_json is not overridden
render :json => current_user
# If User#to_json is overridden, User requires explicit call
render :json => current_user.to_json
Das alles kommt mir albern vor. Dies scheint mir zu sagen, dass render
nicht aufgerufen wird, Model#to_json
wenn der Typ :json
angegeben wird. Kann jemand erklären, was hier wirklich los ist?
Alle Genien, die mir dabei helfen können, können wahrscheinlich meine andere Frage beantworten: Wie erstelle ich eine JSON-Antwort, indem ich @ foo.to_json (Optionen) und @ bars.to_json (Optionen) in Rails kombiniere?
Ursprüngliche Frage:
Ich habe einige andere Beispiele auf SO gesehen, aber ich mache nicht das, wonach ich suche.
Ich versuche:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Ich steige ArgumentError: wrong number of arguments (1 for 0)
ein
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Irgendwelche Ideen?
username
ist kein Verfahren und foo
und bar
keine Methoden erfordern. Ich habe meine Frage aktualisiert, um zu zeigen, wo der Fehler auftritt.
username
,foo
oderbar
Methoden Argumente erwarten?