【问题标题】:How to create has_and_belongs_to_many relationship with Ember.js & ember-data?如何使用 Ember.js 和 ember-data 创建 has_and_belongs_to_many 关系?
【发布时间】:2012-08-20 17:44:22
【问题描述】:

是否可以使用 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。

【问题讨论】:

  • 我想您是在问关于对图形建模的问题?此处询问必要的功能(建模树):stackoverflow.com/questions/11997066/…(我赞成)
  • @pauldechov 该帖子可能与我想要实现的目标相同——我不太确定。我添加了一些我正在尝试完成的 ActiveRecord 模型示例。很抱歉最初缺乏信息。
  • Ember 中没有明确的 HABTM。以下是支持的关联:github.com/emberjs/data/tree/master/packages/ember-data/lib/… 您可以尝试使用类似于@pauldechov 建议的中间节点/表的 has_many。编辑:实际上,由于中间的 has_many 需要一个 ID(以 rails 的思维方式),我不确定这是否会起作用。 ://
  • “has_many :through”关系是否有效?
  • 我已经在这里发布了一个答案,也许它现在可以帮助,因为 ember-data stackoverflow.com/questions/13299924/…987654323@ 中还没有内置的多对多支持

标签: ruby-on-rails ember.js has-and-belongs-to-many ember-data


【解决方案1】:

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

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

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

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

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

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-07-22
    • 2014-03-25
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多