Ruby on rails Ember JS中的Rails STI和多态性
我的设置:Ruby on rails Ember JS中的Rails STI和多态性,ruby-on-rails,ember.js,polymorphism,ember-data,sti,Ruby On Rails,Ember.js,Polymorphism,Ember Data,Sti,我的设置: Rails 4.1 with active-model-serializer gem Ember 1.9.0 Ember-Data 1.0.0 beta with ActiveModelAdapter used as ApplicationAdapter 我有一个名为Jobs的STI表,它有许多子类型。每个作业都有许多行项目。我在Rails中使用ActiveModelSerializer以Ember data能够理解的方式序列化JSON数据。我的模型在Rails中的设置方式如下:
Rails 4.1 with active-model-serializer gem
Ember 1.9.0
Ember-Data 1.0.0 beta with ActiveModelAdapter used as ApplicationAdapter
我有一个名为Jobs的STI表,它有许多子类型。每个作业都有许多行项目。我在Rails中使用ActiveModelSerializer以Ember data能够理解的方式序列化JSON数据。我的模型在Rails中的设置方式如下:
class Job < ActiveRecord::Base
has_many :line_items
...
end
class DisposalJob < Job
...
end
class SupplyJob < Job
...
end
class LineItem < ActiveRecord::Base
belongs_to :job, polymorphic: true
...
end
Rails中的序列化程序设置如下:
class BaseSerializer < ActiveModel::Serializer
ActiveModel::Serializer.setup do |config|
config.embed = :ids
config.embed_in_root = true
end
end
class JobSerializer < BaseSerializer
...
has_many :line_items
end
class DisposalJobSerializer < JobSerializer
...
end
class SupplyJobSerializer < JobSerializer
...
end
class LineItemSerializer < BaseSerializer
belongs_to :job, polymorphic: true
end
编辑:我已经尝试过重构它,以便行\项同时接受作业\ id和作业\类型,而不仅仅是作业\ id。Ember仍然告诉我,它希望在这个关系中有一个“作业”记录。我已经尝试通过删除余烬端的“belongsTo”来回避这个问题,只需让行项目包含job\u id:DS.attr“number”和job\u type:DS.attr”字符串“。这允许我保存记录,但如果没有belongsTo关联,当Ember显示它们所附加到的作业时,将找不到行项目。如果启用了模型工厂注入,则将无法使用子类,因为基于原型的继承检查失败并且失败 我发现在模型层使用Ember.Data和Ember.model进行STI实际上并不可行,原因如下:
当涉及到验证和其他业务规则时,控制器可以提供您需要的外观。Ember的方式是让控制器装饰模型,你当然可以创建不同的控制器类来装饰模型。是的,我们最终放弃了它,转而支持Rails的默认UJS,Ember并没有真正为我们工作,正是因为这些原因。谢谢你的回答。
class BaseSerializer < ActiveModel::Serializer
ActiveModel::Serializer.setup do |config|
config.embed = :ids
config.embed_in_root = true
end
end
class JobSerializer < BaseSerializer
...
has_many :line_items
end
class DisposalJobSerializer < JobSerializer
...
end
class SupplyJobSerializer < JobSerializer
...
end
class LineItemSerializer < BaseSerializer
belongs_to :job, polymorphic: true
end
Uncaught Error: Assertion Failed: You can only add a 'job' record to this relationship