Memperbarui:
Masalah ini tidak dieksplorasi dengan benar. Masalah sebenarnya ada di dalam render :json
.
Tempel kode pertama dalam pertanyaan asli akan menghasilkan hasil yang diharapkan. Namun, masih ada keberatan. Lihat contoh ini:
render :json => current_user
adalah TIDAK sama dengan
render :json => current_user.to_json
Artinya, render :json
tidak akan secara otomatis memanggil to_json
metode yang terkait dengan objek Pengguna. Faktanya , jika model to_json
diganti User
, render :json => @user
akan menghasilkan seperti yang ArgumentError
dijelaskan di bawah ini.
ringkasan
# 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
Ini semua tampak konyol bagiku. Ini sepertinya memberi tahu saya bahwa render
sebenarnya tidak memanggil Model#to_json
ketika tipe :json
ditentukan. Adakah yang bisa menjelaskan apa yang sebenarnya terjadi di sini?
Setiap genii yang dapat membantu saya dengan ini kemungkinan dapat menjawab pertanyaan saya yang lain: Bagaimana membangun respons JSON dengan menggabungkan @ foo.to_json (opsi) dan @ bars.to_json (opsi) di Rails
Pertanyaan Asli:
Saya telah melihat beberapa contoh lain di SO, tetapi saya tidak melakukan apa yang saya cari.
Saya mencoba:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Aku mulai ArgumentError: wrong number of arguments (1 for 0)
di
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Ada ide?
username
,foo
ataubar
mengharapkan argumen?