2012-10-22 98 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(或缺乏)。我会写一篇博客文章,分享我们一路上发现的内容。 –