7

是否可以使用 Ember.js 和 ember-data 创建 hasAndBelongsToMany 关系?

编辑:添加了 ActiveRecord 模型示例以进行澄清。

class Project < ActiveRecord::Base
  has_and_belongs_to_many :tags
end

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :projects
end

我有一个关联表“projects_tags”链接 project_id <=> tag_id。

4

1 回答 1

4

在这个例子中,我建议在 Post 中嵌入标签,这样生成的结构看起来像这样

{
   title: "some post",
   tags: [ "tag1", "tag2" ]
}

当您不需要对关系具有附加值时,这通常是一种很好的做法。如果您想Tag在客户端上拥有模型,您仍然可以通过嵌入来实现。

{
   title: "some post",
   tags: [ { name: "first tag" }, { name: "second tag" } ]
}

在这种情况下,您可以将其指定为嵌入关系,例如

App.Post = DS.Model.extend({
  title: DS.attr("string"),
  tags: DS.hasMany("App.Tag")
});

App.Tag = DS.Model.extend({
  name: DS.attr("string"),
  post: DS.belongsTo("App.Post")
});

App.store.adapter.serializer.map("App.Tag", {
  tags: { embedded: 'load' }
});

请记住,嵌入仅适用于 Ember Data 修订版 10。它在 5-9 中不受支持。

大多数时候,您并不真的想以与在关系数据库中建模相同的方式对所有内容进行建模。

你应该倾向于 NoSQL-ish JSON,这通常意味着嵌入东西,而不是建立复杂的关联。这样做的原因是您的数据库可以JOIN非常有效地进行数据处理,尤其是使用索引,但是通过网络执行此操作是一个坏主意,因为它会导致大量请求。

于 2012-12-19T09:10:39.637 回答