Ember关联和嵌套URL

时间:2012-10-22 14:27:37

标签: javascript ruby-on-rails ember.js ember-data

我们正在使用Ember数据和Rails实现一项功能,并不断遇到麻烦。我们不确定这是否是我们的代码存在问题,是Ember或Ember数据的错误,还是因为缺少文档我们没有得到它。

任何帮助都会非常感激。

滑轨

我们有一个待办事项列表,有多个条目。在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 gem并设置了以下序列化程序:

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

灰烬

我们正在使用Ember数据和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')
});

问题

我的理解是,我们应该能够直接从ToDo访问条目列表,方法是在控制台中使用以下内容:

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

这似乎有效,但只返回一个类,我不知道如何调试它,看看它是否正常工作。

我有两个具体问题:

  1. 我们如何使用控制台调试关联并确保它们正常工作。

  2. 如果我们单独加载条目(而不是将它们嵌入父项中),我们如何才能使用上面的嵌套路由?

1 个答案:

答案 0 :(得分:4)

首先,从模型中获取关联会返回DS.ManyArray,其中包含您所假设的对象 有几种方法可以调试它,首先它会响应常规数组方法,例如lengthfirstObjectlastObjectobjectAt。 如果这不够有用,它也会响应toArray,它将它转换为一个普通的JS数组。

不幸的是,最新的ember-data迭代实际上删除了嵌入式记录(我认为这可能是暂时的)。目前,默认RESTAdapter不支持嵌套资源URL,但您可以随时自定义它以满足您的需求

然而,有关将嵌套资源放入核心的工作正在进行PR的#367#257