2012-10-22 101 views
5

我們正在使用Ember數據和Rails實現一個功能,並不斷遇到障礙。我們不確定這是否與我們的代碼存在問題,Ember或Ember數據存在問題,或者僅僅是因爲缺少文檔而無法獲取它。灰燼關聯和嵌套的URL

任何幫助將非常感激。

Rails的

我們有一個待辦事項清單,與多個條目。在Rails中,它們被設置如下:

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寶石,並具有以下串行設置:

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 

灰燼

我們使用灰燼數據和REST適配器和等效模型的建立如下:

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(「entries」)。toArray()'。您將能夠驗證這些ID。你可以像't.get(「entries」)。toArray()[0] .get('title')''來檢查一個給定的屬性。我不相信巢路由REST adapapter開箱即用。實際上有一個關於它的[問題](https://github.com/emberjs/data/issues/170),我現在已經關閉了。我還沒有機會嘗試在我的適配器中實現嵌套路由(我現在在服務器上使用了一個解決方法)。 –

回答

4

首先,從模型中獲取關聯返回一個DS.ManyArray,其中包含您假設的對象。
有幾種調試方法,首先響應正常的數組方法,如length,firstObject,lastObject,objectAt
如果沒有足夠的幫助,它也會響應toArray將其轉換爲香草JS陣列。

不幸的是,最新的ember-data迭代實際上刪除了嵌入式記錄(我認爲這可能是暫時的)。當前嵌套資源URL不被默認RESTAdapter支持,但你總是可以定製,以滿足您的需求

然而有做工正在對越來越嵌套的資源投入到核心做看PR的#367#257

+0

太好了,謝謝。這真的有幫助。看起來我們是在那裏的一半,但有一個問題與命名和inflector(或缺乏)。我會寫一篇博客文章,分享我們一路上發現的內容。 –