2012-10-22 12 views
5

हम एम्बर डेटा और रेल का उपयोग करके एक सुविधा लागू कर रहे हैं और एक झटके मार रहे हैं। हमें यकीन नहीं है कि यह हमारे कोड के साथ एक समस्या है, एम्बर या एम्बर डेटा के साथ एक बग या सिर्फ यह कि हम दस्तावेज़ीकरण की कमी के कारण इसे प्राप्त नहीं कर रहे हैं।एम्बर एसोसिएशन और नेस्टेड यूआरएल

किसी भी मदद की वास्तव में सराहना की जाएगी।

रेल

हम एक सूची करने के लिए, कई प्रविष्टियों के साथ की है। रेल में, वे की स्थापना इस प्रकार रहे:

class ToDo < ActiveRecord::Base 
    has_many :to_do_entries, dependent: :destroy 
    alias_method :entries, :to_do_entries 
    validates_presence_of :title 
end 

class ToDoEntry < ActiveRecord::Base 
    attr_accessible :completed_at, :is_deleted, :priority, :title 

    belongs_to :to_do 
    alias_method :parent, :to_do 

    validates_presence_of :to_do, :title  
end 

मार्गों के रूप में नेस्टेड सेट कर रहे हैं:

resources :to_dos do 
    resources :to_do_entries do 
    end 
end 

और इसलिए अंत यूआरएल जा रहा है खत्म /to_do /: to_do_id/to_do_entry /: to_do_entry_id

हम active_model_serializers मणि का उपयोग कर रहे हैं और निम्नलिखित serializers की स्थापना की है: हम एंबर डेटा और बाकी एडाप्टर और बराबर मॉडल स्थापित कर रहे हैं का उपयोग कर रहे

class ToDoSerializer < ActiveModel::Serializer 
    attributes :id, 
      :title 

    has_many :to_do_entries, embed: :objects 
end 

class ToDoEntrySerializer < ActiveModel::Serializer 
    attributes :id, 
      :to_do_id, 
      :title, 
      :priority 

    has_one :to_do 
end 

एंबर

इस प्रकार है:

App.ToDo = DS.Model.extend({ 
    title: DS.attr('string'), 
    entries: DS.hasMany('App.ToDoEntry', { embedded: true }) 
}); 

App.ToDoEntry = DS.Model.extend({ 
    title: DS.attr('string'), 
    to_do_id: DS.attr('number'), 
    priority: DS.attr('number'), 
    todo: DS.belongsTo('App.ToDo') 
}); 

समस्या

मेरे समझ है कि हम टूडू से सीधे एंट्री में उपयोग करने के लिए, का उपयोग करके कंसोल में निम्नलिखित में सक्षम होना चाहिए है:

> t = App.ToDo.find(21) 
> e = t.get("entries") 

यह काम करने के लिए प्रतीत होता है, लेकिन सिर्फ एक वर्ग वापस आती है और मुझे नहीं पता कि इसे कैसे डिबग करना है और देखें कि यह काम कर रहा है या नहीं।

मैं दो विशिष्ट प्रश्न हैं:

  1. हम कैसे डीबग कर सकते हैं, कंसोल का उपयोग कर, संगठनों और सुनिश्चित करें कि वे सही ढंग से काम कर रहे हैं।

  2. यदि हम अलग-अलग प्रविष्टियों को अलग-अलग लोड करते हैं (उन्हें माता-पिता में एम्बेड करने के बजाय), हम इसे ऊपर के जैसा घोंसला वाले मार्गों का उपयोग कैसे कर सकते हैं?

+0

आप कर सकता है कुछ देखते हैं सूट करने के लिए अनुकूलित कर सकते हैं जैसे 't.get ("प्रविष्टियां")। toArray() '। आप आईडी को सत्यापित करने में सक्षम होंगे। और आप किसी दिए गए संपत्ति का निरीक्षण करने के लिए 't.get (" प्रविष्टियां ") कुछ कर सकते हैं। ToArray() [0] .get ('title')'। मुझे विश्वास नहीं है कि आरईएसटी एडैप्टर के साथ बॉक्स के बाहर घोंसले मार्ग समर्थित हैं। वास्तव में एक [मुद्दा] (https://github.com/emberjs/data/issues/170) था जिसके बारे में मैंने खोला और अब बंद कर दिया गया है। मुझे अभी तक मेरे एडाप्टर में घोंसले वाले मार्गों को लागू करने का प्रयास करने का मौका मिला है (मैं अब सर्वर पर एक कार्य-आसपास का उपयोग कर रहा हूं)। –

उत्तर

4

सबसे पहले, एक मॉडल से एक संघ हो रही एक DS.ManyArray की तरह आप मान लिया जो अपने ऑब्जेक्ट हैं देता है।
इसे डीबग करने के कुछ तरीके हैं, सबसे पहले यह सामान्य सरणी विधियों जैसे length, firstObject, lastObject, objectAt का जवाब देता है।
यदि यह पर्याप्त सहायक नहीं है, तो यह toArray का भी जवाब देता है जो इसे एक वेनिला जेएस ऐरे में परिवर्तित करता है।

दुर्भाग्यवश, एम्बर-डेटा का नवीनतम पुनरावृत्ति वास्तव में एम्बेडेड रिकॉर्ड्स को हटा देता है (मुझे लगता है कि यह अस्थायी हो सकता है)।वर्तमान में नेस्ट संसाधन यूआरएल डिफ़ॉल्ट RESTAdapter द्वारा समर्थित नहीं हैं, लेकिन आप हमेशा अपनी आवश्यकताओं

वहाँ तथापि कोर में नेस्टेड संसाधनों हो रही पर किया जा रहा काम है पीआर के #367 और #257

+0

ग्रेट, धन्यवाद। वास्तव में मदद की। ऐसा लगता है कि हम वहां आधे रास्ते थे, लेकिन नामकरण और घुमावदार (या की कमी) के साथ कोई समस्या थी। मैं जिस तरह से बाहर निकलता हूं उसे साझा करने के लिए मैं एक ब्लॉग पोस्ट लिखूंगा। –

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