अपडेट करें:
इस मुद्दे को ठीक से नहीं खोजा गया था। असली मुद्दा भीतर है render :json
।
मूल प्रश्न में पहला कोड पेस्ट अपेक्षित परिणाम देगा। हालांकि, अभी भी एक चेतावनी है। इस उदाहरण को देखें:
render :json => current_user
के रूप में ही नहीं है
render :json => current_user.to_json
यही है, render :json
स्वचालित रूप to_json
से उपयोगकर्ता ऑब्जेक्ट से जुड़ी विधि को कॉल नहीं करेगा । वास्तव में , यदि मॉडल to_json
पर ओवरराइड किया जा रहा है , तो नीचे वर्णित वर्णन उत्पन्न करेगा ।User
render :json => @user
ArgumentError
सारांश
# 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
यह सब मुझे मूर्खतापूर्ण लगता है। यह मुझे ऐसा प्रतीत हो रहा है जो render
वास्तव में कॉल नहीं कर रहा है Model#to_json
जब प्रकार :json
निर्दिष्ट किया गया है। क्या कोई समझा सकता है कि वास्तव में यहाँ क्या हो रहा है?
कोई भी जिन्न जो मेरी मदद कर सकता है, वह मेरे अन्य प्रश्न का उत्तर दे सकता है: Rails में @ foo.to_json (विकल्प) और @ bar.to_json (विकल्प) को मिलाकर JSON प्रतिक्रिया कैसे बनाएं
मूल प्रश्न:
मैंने SO पर कुछ अन्य उदाहरण देखे हैं, लेकिन मैं वह नहीं कर रहा हूं जो मैं देख रहा हूं।
मैं कोशिश कर रहा हूँ:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
मैं हो रही है ArgumentError: wrong number of arguments (1 for 0)
में
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
कोई विचार?
username
यह एक विधि नहीं है foo
और bar
इसे विधियों की आवश्यकता नहीं है। मैंने अपना प्रश्न यह दिखाने के लिए अद्यतन किया कि त्रुटि कहाँ हो रही है।
username
,foo
याbar
तरीकों तर्क उम्मीद करते हैं?