Aggiornare:
Questo problema non è stato adeguatamente esplorato. Il vero problema sta all'interno render :json
.
La prima incolla di codice nella domanda originale produrrà il risultato atteso. Tuttavia, c'è ancora un avvertimento. Guarda questo esempio:
render :json => current_user
NON è lo stesso di
render :json => current_user.to_json
Cioè, render :json
non chiamerà automaticamente il to_json
metodo associato all'oggetto Utente. Infatti , se to_json
viene sovrascritto sul User
modello, render :json => @user
verrà generato quanto ArgumentError
descritto di seguito.
sommario
# 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
Tutto questo mi sembra sciocco. Questo sembra dirmi che render
non sta effettivamente chiamando Model#to_json
quando :json
viene specificato il tipo . Qualcuno può spiegare cosa sta realmente succedendo qui?
Qualsiasi genio che può aiutarmi in questo può probabilmente rispondere alla mia altra domanda: come costruire una risposta JSON combinando @ foo.to_json (opzioni) e @ bars.to_json (opzioni) in Rails
Domanda originale:
Ho visto altri esempi su SO, ma nessuno fa quello che cerco.
Sto provando:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Mi sto ArgumentError: wrong number of arguments (1 for 0)
in
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Qualche idea?
username
non è un metodo e foo
e bar
non richiedono metodi. Ho aggiornato la mia domanda per mostrare dove si sta verificando l'errore.
username
,foo
obar
metodi aspettano argomenti?