簡體   English   中英

Ember.js / Rails將關系發布到Rails

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM