2

ember.js / ember-data.jsで、モデルとその関連付けを作成するための情報を送信するように、ストアをRailsにPOSTする方法はありますか?いくつかのコンテキストを提供しましょう。

3つのレールモデルがあるとします。

class Post < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, :through => :categorizations

  attr_accessible :categories_attributes

  accepts_nested_attributes_for :categories
end

class Categories < ActiveRecord::Base
  has_many :categorizations
  has_many :posts, :through => :categorizations
end

class Categorizations < ActiveRecord::Base
  belongs_to :post
  belongs_to :categories
end

ember.jsで、1つのリクエストでその分類とともに投稿を作成できるようにしたいと思います。これは私がそれを達成するためにしたことです:

App.Category = DS.Model.extend
  name: DS.attr 'string'

App.Categorization = DS.Model.extend
  post: DS.belongsTo 'App.Post'
  category: DS.belongsTo 'App.Category'

App.Post = DS.Model.extend
  title: DS.attr 'string'
  content: DS.attr 'string'
  categorizations: DS.hasMany 'App.Categorization',
    embedded: true
  toJSON: (options={}) ->
    options.associations = true
    @_super(options)


# meanwhile, somewhere else in code...

post = App.store.createRecord App.Post,
  title: "some title"
  content: "blah blah"

transaction = App.store.transaction()
categorization = transaction.createRecord App.Categorization,
  category: category # an instance of DS.Category

post.get('categorizations').pushObject categorization

# XXX: This enables ember-data to include categorizations in the post hash when
# POSTing to the server so that we can create a post and its categorizations in
# one request. This hack is required because the categorization hasn't been
# created yet so there is no id associated with it.
App.store.clientIdToId[categorization.get('clientId')] = categorization.toJSON()
transaction.remove(categorization)

App.store.commit()

App.store.commit()が呼び出されたときに、次のようなもので/postsにPOSTするようにしようとしています。

{
  :post => {
    :title => "some title",
    :content => "blah blah,
    :categorizations => [ # or :categorizations_attributes would be nice
      {
        :category_id => 1
      } 
    ]
  }
}

分類を作成するためにcategorizations_controllerへの残り火POSTを使用せずにこれを達成する方法はありますか?

4

1 に答える 1

1

RESTAdapterがそのbulkCommitオプションで何をするかを調べる必要があります。はRESTAdapterRails で動作することを意図していますが、完全にサポートするには Rails 側で少し設定を行う必要があるでしょう。https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.jsを参照してください

于 2012-10-12T00:34:50.010 に答える