Mettre à jour:
Ce problème n'a pas été correctement exploré. Le vrai problème réside à l'intérieur render :json
.
Le premier collage de code dans la question d'origine donnera le résultat attendu. Cependant, il y a toujours une mise en garde. Voir cet exemple:
render :json => current_user
n'est PAS la même chose que
render :json => current_user.to_json
Autrement dit, render :json
n'appellera pas automatiquement la to_json
méthode associée à l'objet User. En fait , si to_json
est remplacé sur le User
modèle, render :json => @user
générera le ArgumentError
décrit ci-dessous.
résumé
# 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
Tout cela me semble idiot. Cela semble me dire que ce render
n'est pas réellement un appel Model#to_json
lorsque le type :json
est spécifié. Quelqu'un peut-il expliquer ce qui se passe vraiment ici?
Tous les génies qui peuvent m'aider dans ce domaine peuvent probablement répondre à mon autre question: Comment créer une réponse JSON en combinant @ foo.to_json (options) et @ bars.to_json (options) dans Rails
Question originale:
J'ai vu d'autres exemples sur SO, mais je ne fais pas ce que je recherche.
J'essaie:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Je reçois ArgumentError: wrong number of arguments (1 for 0)
dans
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Des idées?
username
n'est pas une méthode et foo
et bar
ne nécessitent pas de méthodes. J'ai mis à jour ma question pour montrer où se produit l'erreur.
username
,foo
oubar
attend-elle des arguments?