[英]Ember.js / Rails Posting Relationships to Rails
好的,我正在開發一個簡單的Ember / Rails應用程序,並且試圖在單個HTTP請求中發布hasMany關聯。 對於它的價值,我將Rails用於API。
灰燼:1.4.0-beta.1 + canary.011b67b8
灰燼數據:1.0.0-beta.5 + canary.d9ce2a53
車把:1.1.1
的jQuery:1.10.2
發布模型
App.Release = DS.Model.extend
name: DS.attr 'string'
tracks: DS.hasMany 'track', {embedded: 'true'}
一個“發行”有很多“曲目”
App.ReleasesNewRoute = Ember.Route.extend
model: -> @store.createRecord 'release'
afterModel: (release, transition)->
release.get('tracks').addObject(@store.createRecord 'track',{
name: 'Track 1'
}).pushObject(@store.createRecord 'track',{
name: 'Track 2'
})
setupController: (controller, model)->
controller.set('content', model)
發布控制器
App.ReleasesNewController = Ember.ObjectController.extend
actions:{
save: ->
@content.save()
}
如何同時發布兩個曲目和一個發行版? 我打算在Rails API中使用accepts_nested_attributes_for:tracks ...,但是如果我能在開發控制台中看到Tracks作為開始,我會很高興。
我得到這樣的工作:
App.ReleaseSerializer = DS.RESTSerializer.extend
serializeHasMany: (record, json, relationship)->
key = relationship.key
hasManyRecords = Ember.get(record, key)
key = key+'_attributes'
if hasManyRecords && relationship.options.embedded == 'true'
json[key] = []
hasManyRecords.forEach (item, index)->
json[key].push(item.serialize())
else
@._super(record, json, relationship)
這與Rails中的:accepts_nested_attributes_for很好地配合。 Rails期望在發行版下面嵌套的軌道模型的哈希為tracks_attributes 。
夫妻陷阱:
Rails不會對Child模型使用create動作,您必須將要對孩子模型做的任何事情放在Parent的create動作中。
記住將孩子的Rails 4參數列入白名單。這看起來像:
def release_params params.require(:release).permit(:name, tracks_attributes: [:name]) end
ember-data 1 beta版不再支持“嵌入”。 檢查此鏈接以了解如何使用embed創建子記錄。 更好用
https://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records
檢查此問題,以了解更多有關以其他更好的方式創建子記錄的信息。 如何將子記錄添加到現有的父記錄中?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.