我现在在两个不同的实例上遇到了这个问题,但它们都是同一个问题。首先,我的模型是一个问题的实例:
主机:
Minicron.Host = DS.Model.extend({
hostname: DS.attr('string'),
name: DS.attr('string'),
created_at: DS.attr('date'),
jobs: DS.hasMany('job')
});
作业:
Minicron.Job = DS.Model.extend({
name: DS.attr('string'),
command: DS.attr('string'),
created_at: DS.attr('date'),
host: DS.belongsTo('host')
});
我的工作模式收到的JSON:
{
"jobs":[
{
"id":"94e81ce07cec25451ce711fce3d96bea",
"name":"uname -a",
"command":"uname -a",
"created_at":"2014-03-10T16:25:08Z",
"host":{
"id":8,
"hostname":"lucid32",
"name":"lucid32",
"created_at":"2014-03-08T18:13:52Z"
},
"executions":[
{
"id":406,
"job_id":"94e81ce07cec25451ce711fce3d96bea",
"host_id":8,
"created_at":"2014-03-09T18:15:28Z",
"started_at":"2014-03-09T18:15:28Z",
"finished_at":"2014-03-09T18:15:28Z",
"exit_status":0
}
]
}
]
}
主机模型收到的JSON是:
{
"hosts":[
{
"id":8,
"hostname":"lucid32",
"name":"lucid32",
"created_at":"2014-03-08T18:13:52Z",
"jobs":[
{
"id":"94e81ce07cec25451ce711fce3d96bea",
"name":"uname -a",
"command":"uname -a",
"host_id":8,
"created_at":"2014-03-10T16:25:08Z"
}
]
}
]
}
我遇到的问题是当我的主机模型被加载时,作业模型的主机关系似乎被覆盖了。我认为这是因为在JSON中,每个作业的主机都有host_id param和ember正在替换它所知道的关于该主机的现有数据,基本上什么都没有。我的API是一个Sinatra应用程序,使用activerecord和activemodel将我的模型序列化为JSON,所以我真的没有一种简单的方法可以从响应中删除host_id。
同样值得注意的是我在这里使用自定义序列化程序http://mozmonkey.com/2013/12/loading-json-with-embedded-records-into-ember-data-1-0-0-beta/,如果没有它,我无法让Ember识别我的侧载数据。
我一直试图解决这个问题几天了,我完全没有想法:(
如果您有任何疑问,请告知我们是否有助于我的应用的完整资源来自GitHub https://github.com/jamesrwhite/minicron/tree/master/lib/minicron/hub
谢谢!
答案 0 :(得分:0)
您可以将Active Model Serializers gem添加到Sinatra应用程序并从响应中删除host_id:
class JobSerializer < ActiveModel::Serializer
attributes :created_at, :started_at, :finished_at, :exit_status
end