Мои настройки:Rails STI и полиморфизм в угасающий JS
Rails 4.1 with active-model-serializer gem
Ember 1.9.0
Ember-Data 1.0.0 beta with ActiveModelAdapter used as ApplicationAdapter
У меня есть таблица STI под названием Работа, которая имеет много подтипов. Каждое задание имеет множество строк. Я использую ActiveModelSerializers в Rails для сериализации данных JSON таким образом, который понимает Ember-Data. Мои модели настроены таким образом, в 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
И этот путь в Эмбер:
App.Job = DS.Model.extend
line_items: DS.hasMany "line_item"
...
App.DisposalJob = App.Job.extend
...
App.SupplyJob = App.Job.extend
...
App.LineItem = DS.Model.extend
job: DS.belongsTo "job",
polymorphic: true
Мои сериализаторов в 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
Моя проблема когда я пытаюсь сохранить line_item в подклассе заданий (я не использую класс Job напрямую), Ember отказывается видеть, что DisposalJob является типом задания и выдает ошибку, которая ожидает, что запись «Job» будет сохранена к этому отношению, а не к «DisposalJob» или «SupplyJob», несмотря на то, что это оба подкласса Job. Я новичок в Ember, поэтому любая помощь будет очень признательна.
EDIT: Вот ошибка я получаю при попытке сохранить DisposalJob в отношении работы по LineItem в Эмбер:
Uncaught Error: Assertion Failed: You can only add a 'job' record to this relationship
EDIT: Я пытался рефакторинга это так, что Line_Item принимает как job_id и job_type а не просто job_id. Эмбер все еще говорит мне, что он ожидает записи о работе в этом отношении. Я попытался обойти эту проблему, исключив «принадлежит на стороне ember и просто включил line_item job_id: DS.attr» number »и job_type: DS.attr« string ». Это позволяет мне сохранить запись, но без belongsTo ассоциации, линия-элементы не будут найдены, когда Эмбер показывает работу, которую они прикрепляются к.
Да, мы в конечном итоге отказались от этого проекта в пользу UJS по умолчанию Rails, Эмбер на самом деле не работал для нас по этим причинам. Спасибо за Ваш ответ. –