2011-03-01 5 views
6

मैं रेल 3 पर रूबी का उपयोग कर रहा हूं और मैं to_json विधि को ओवरराइड करना चाहता हूं।'to_json' विधि को ओवरराइड करने वाले मानों को कैसे बदला जाए?

इस समय मैं महत्वपूर्ण जानकारी निर्यात करने से बचने के लिए निम्न कोड का उपयोग करता हूं।

def to_json 
    super(
     :except => [ 
     :password 
     ] 
    ) 
    end 

मुझे लगता है कि विधि का उपयोग कर एक मूल्य बदल चाहते हैं, मैं कैसे कर सकता है?

उदाहरण के लिए, मैं पुन: प्राप्त करने के लिए इस

@user.to_json 
+0

इसी तरह की समस्या यहां सहायक हो सकती है। http://stackoverflow.com/questions/4703509/how-to-customize-the-to-json-method-in-rails3 – lashleigh

उत्तर

0

to_json को :methods विकल्प का उपयोग करें पर उपयोगकर्ता नाम

:name => name.capitalize 

भुनाने करना चाहते हैं।

http://apidock.com/rails/ActiveRecord/Serialization/to_json

+0

मुझे 'def to_json ...' (मेरे मॉडल में) और 'कोनाटा' की आवश्यकता नहीं है। to_json (: विधियों =>: परमालिंक) '(नियंत्रक या कहीं और में) – user502052

+0

ओह, तो आप डिफ़ॉल्ट to_json को ओवरराइड करना चाहते हैं? यह ठीक है, मुझे लगता है। – rmk

+0

मैंने कई परीक्षणों का प्रयास किया, लेकिन मुझे हमेशा त्रुटियां मिल रही थीं। कृपया, क्या आप मुझे एक कामकाजी उदाहरण बना सकते हैं? – user502052

10

आप रेल 3 के लिए नियंत्रक में render :json => @user करना चाहते हैं, तो आप मॉडल में as_json ओवरराइड कर सकते हैं:

class User < ActiveRecord::Base 
    def as_json(options={}) 
    result = super({ :except => :password }.merge(options)) 
    result["user"]["name"] = name.capitalize 
    result 
    end 
end 

यहाँ differences between to_json and as_json के बारे में एक अच्छा पोस्ट है।

+1

FWIW, रेल उपयोगकर्ता 3.1.3 में 'user.to_json' को कॉल करते समय, मैं विकल्प तर्क के लिए 'as_json' प्राप्त' nil' देख रहा था, इसलिए मैंने' विकल्प || = {} 'को मेरी पहली पंक्ति के रूप में जोड़ा कस्टम 'as_json' विधि। –

+0

यह 3.0 ऐप में भी काम करता है। महान जवाब, इसे उठाओ !!! – pjammer

संबंधित मुद्दे