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 :jsondie to_jsondem Benutzerobjekt zugeordnete Methode wird nicht automatisch aufgerufen . In der Tat , wenn to_jsonauf der überschrieben wird UserModell render :json => @usergeneriert die ArgumentErrorunten 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 rendernicht aufgerufen wird, Model#to_jsonwenn der Typ :jsonangegeben 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?
usernameist kein Verfahren und foound barkeine Methoden erfordern. Ich habe meine Frage aktualisiert, um zu zeigen, wo der Fehler auftritt.
username,foooderbarMethoden Argumente erwarten?