我在我的项目中使用Ember Data的ActiveModelAdapter并定义了一些类似的模型:
App.GiftCard = DS.Model.extend(
destination: DS.belongsTo('destination', polymorphic: true)
isCampaign: (->
@get('destination.constructor') == App.Campaign
).property()
)
App.Destination = DS.Model.extend()
App.Campaign = DS.Model.extend()
我的礼品卡型号具有多态关系作为目的地,其中一种类型将是广告系列。
这一切都在应用程序中按预期工作,但现在我尝试使用QUnit编写isCampaign
行为的单元测试。我无法弄清楚的部分是如何创建GiftCard记录并将广告系列指定为多态目的地?
我尝试过几种不同的方法。第一个是创建一个活动记录并将其分配给目标属性:
campaign = @store.createRecord('campaign', id: 1)
@gift_card = @store.createRecord('gift_card',
id: 1
amount: 100.00
destination: campaign
)
但是这给出了错误:
断言失败:您只能添加'目的地'记录这种关系
我尝试的另一件事就是创建一个目标记录,并指定类型:
campaign = @store.createRecord('destination', id: 1, type: 'campaign')
@gift_card = @store.createRecord('gift_card',
id: 1
amount: 100.00
destination: campaign
)
但在这种情况下,destination.constructor
是App.Destination
,这不是我想要的。
对于它的价值,我设置关系的API中的JSON如下所示:
{
"gift_card":{
"id":1,
"amount":100.0,
"destination":{
"type":"campaign",
"id":5
},
"created_at":"2013-12-10T01:17:30.373Z"
}
}
答案 0 :(得分:0)
我能够通过将createRecord
更改为push
并将目标指定为ID,并将destinationType指定为模型来实现此目的:
@store.createRecord('campaign', id: 1)
@gift_card = @store.push('gift_card',
id: 1,
amount: 100.00,
destination: 1,
destinationType: 'campaign'
)