Ember和Rails的多态关系

时间:2014-07-23 03:39:01

标签: ember.js ember-data

我一直在为这个问题寻找不同的解决方案,但我似乎无法找到任何结论,如何最好地处理Rails和Ember之间的多态关系。在我的例子中,我有一个名为“todos”的多态表,其中一个与该表的关系称为“patient”。我得到了todo记录,但他们不知道他们与哪些患者有关。对此有任何帮助将不胜感激。

RAILS模型:

class Todo < ActiveRecord::Base
  belongs_to :todoable, polymorphic: true
end

class Patient < ActiveRecord::Base
  has_many :todos, as: :todoable
end

RAILS SERIALIZERS:

class TodoSerializer < ActiveModel::Serializer
  attributes :id, :content, :todoable_id, :todoable_type
end

class PatientSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name, :email
  has_many :todos
  embed :ids, include: true
end

EMBER数据模型:

App.Todo = DS.Model.extend
  todoable_id: DS.attr 'number'
  todoable_type: DS.attr 'string'
  content: DS.attr 'string'
  patient: DS.belongsTo 'patient'

App.Patient = DS.Model.extend
  firstName: DS.attr 'string'
  lastName: DS.attr 'string'
  email: DS.attr 'string'
  todos: DS.hasMany 'todo', polymorphic: true, async: true

1 个答案:

答案 0 :(得分:3)

这实际上是一种正常的多对一关系(即许多Todos可以属于一个患者),而不是多态关系。如果你说“ Todos可以属于病人或医生或狗”,那么多态可能就是答案。

所以,你可以这样做:

class Todo < ActiveRecord::Base
  belongs_to :patient
end

class Patient < ActiveRecord::Base
  has_many :todos
end

在恩伯:

App.Todo = DS.Model.extend
  patient: DS.belongsTo 'patient'

App.Patient = DS.Model.extend
  todos: DS.hasMany 'todo', async: true