2011-02-26 15 views
10

मैं एक मॉडल तोदो कहा जाता है और मैं इस प्रस्तुत करना साथ json:प्रस्तुत: अतिरिक्त डेटा

format.json { render :json => @todo } 

प्रत्येक तोदो एक सूची belongs_to। मैं के रूप में मैं इस यूआई (AJAX अनुरोध) अद्यतन करने की आवश्यकता JSON के @todo.list.completion_percentage का मूल्य जोड़ना चाहते हैं, तो JSON इस तरह दिखता है:

{ 
    "todo": { 
    "created_at": "2011-02-26T19:39:43Z", 
    "updated_at": "2011-02-26T19:53:13Z", 
    "done": true, 
    "text": "Apples", 
    "id": 10, 
    "list_id": 2, 
    "user_id": 1, 
    "due_date": null 



    // BELOW THIS LINE SHOULD BE IMPLEMENTED 
    "list": { 
     "completion_percentage": 63 
    } 
    } 
} 

मैं विभिन्न चीजों की कोशिश की है, लेकिन कोई भी काम किया। क्या कोई मेरी मदद कर सकता है?

उत्तर

15

आप JSON डेटा के मान को कैप्चर करना चाहते हैं, और उसके बाद इसे संशोधित करना चाहते हैं।

format.json { render :json => JSON::parse(@todo.to_json).merge("list" => { "completion_percentage" => 63 }).to_json } 
19

ब्रैंडन के जवाब को परिष्कृत करने के लिए, का उपयोग करके देखें:
render :json => @todo.attributes.merge({list: { "completion_percentage" => 63 }})

+0

मैं दो मॉडल के लिए जेसन प्रस्तुत करने की कोशिश कर रहा था और डबल रेंडर त्रुटि मिली। उन्हें मर्ज करने के लिए अपने कोड का इस्तेमाल किया और यह पूरी तरह से काम किया। धन्यवाद!! प्रस्तुत करें: json => @ person.attributes.merge (@ vote_balance.attributes) –

0

जैसा कि दूसरों को जानते हैं बुला @ todo.attributes विशेषताओं पर कस्टम तरीकों हटा देगा। जैसे, यदि आप अपने तोदो मॉडल में एक विधि

def written_date 
     self.written_date = self.written_date.utc.beginning_of_day 
    end 

और एक विशेषता तोदो मॉडल पर written_date कहा जाता है, केवल विशेषता वापस आ जाएगा कि डेटाबेस में संग्रहित है।

और जब आप @todo.attributes पर कॉल करते हैं तो वापस आने के लिए कस्टम विधि को छोड़कर, यह नहीं होगा।

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