如何与Ember.js和ember-data创建has_and_belongs_to_many关系?

Dav*_*vid 7 ruby-on-rails has-and-belongs-to-many ember.js ember-data

是否可以与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
Run Code Online (Sandbox Code Playgroud)

我有一个关联表"projects_tags"链接project_id <=> tag_id.

Jak*_*old 4

在此示例中,我建议在帖子中嵌入标签,以便生成的结构如下所示

{
   title: "some post",
   tags: [ "tag1", "tag2" ]
}
Run Code Online (Sandbox Code Playgroud)

当您不需要关系上有额外的价值时,这通常是一个很好的做法。如果你想Tag在客户端拥有模型,你仍然可以通过嵌入来完成。

{
   title: "some post",
   tags: [ { name: "first tag" }, { name: "second tag" } ]
}
Run Code Online (Sandbox Code Playgroud)

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

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' }
});
Run Code Online (Sandbox Code Playgroud)

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

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

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