是否可以与Ember.js&创建一个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&lt; =&gt; TAG_ID。
答案 0 :(得分: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
数据,特别是对于索引,但通过网络执行此操作是一个坏主意,因为它会导致大量请求。