My Setup:
Rails 4.1 with active-model-serializer gem
Ember 1.9.0
Ember-Data 1.0.0 beta with ActiveModelAdapter used as ApplicationAdapter
I have an STI table called Jobs that has many subtypes. Each Job hasMany LineItems. I am using ActiveModelSerializers in Rails to serialize my JSON data in a way that Ember-Data understands. My Models are set up this way in 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
And this way in Ember:
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
My serializers in Rails are set up like so:
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
My problem is when I try to save a line_item to a job subclass (I don't use the Job class directly), Ember refuses to see that a DisposalJob is a type of job and throws an error that it expects a "Job" record to be saved to that relation, rather than a "DisposalJob" or "SupplyJob", despite that these are both subclasses of Job. I'm an Ember newbie, so any help would be greatly appreciated.
EDIT: Here is the error I get when trying to save a DisposalJob to the Job relation on LineItem in Ember:
Uncaught Error: Assertion Failed: You can only add a 'job' record to this relationship
EDIT: I've tried refactoring this so that line_item accepts both job_id and job_type instead of just job_id. Ember still tells me it's expecting a "job" record in this relation. I've tried skirting the issue by eliminating the "belongsTo on the ember side and just have line_item include job_id: DS.attr "number" and job_type: DS.attr "string". This allows me to save the record, but without the belongsTo association, the line-items won't be found when Ember displays the job they are attached to.