ember-dataとrailsを使用してEmber.jsで多対多の関係を保存しようとすると問題が発生します。アソシエーションは残り火側では正常に機能しますが、トランザクションをコミットしようとすると、Railsに送信するときに新しいアソシエーションのリストが含まれません。どんな助けでも大歓迎です、私はgithubでこれほど単純なことをするサンプルアプリケーションを見つけようとして髪を引き裂いてきましたが、私はそれを見つけることができないようです。
これが私のEmberコードのダムダウンバージョンです:
App.Store = DS.Store.extend
revision: 11
adapter: DS.RESTAdapter.create
url: '/api'
App.Router.map ->
@resource 'rosters'
@resource 'users'
App.User = DS.Model.extend
rosters: DS.hasMany 'App.Roster'
App.Roster = DS.Model.extend
users: DS.hasMany 'App.User'
App.RostersEditRoute = Ember.Route.extend
setupController: (controller, model) ->
controller.set 'users_list', App.User.find()
App.RostersEditView = Ember.View.extend
userCheckbox: Em.Checkbox.extend
checkedObserver: ( ->
users = @get 'roster.users'
if @get 'checked'
users.addObject @get 'user'
else
users.removeObject @get 'user'
@get('controller.store').commit()
).observes 'checked'
フォームの編集:
each user in users_list
label.checkbox
view view.userCheckbox rosterBinding="current_roster" userBinding="user" | #{user.full_name}
Railsバックエンド(継承されたリソースとアクティブモデルのシリアライザーgemを使用):
class User < ActiveRecord::Base
has_many :rosters_users
has_many :rosters, through: :rosters_users
accepts_nested_attributes_for :rosters
end
class RostersUser < ActiveRecord::Base
belongs_to :user
belongs_to :roster
end
class Roster < ActiveRecord::Base
has_many :rosters_users
has_many :users, through: :rosters_users
accepts_nested_attributes_for :users
end
module Api
class RostersController < BaseController
end
end
module Api
class UsersController < BaseController
end
end
module Api
class BaseController < ActionController::Base
inherit_resources
respond_to :json
before_filter :default_json
protected
# Force JSON
def default_json
request.format = :json if params[:format].nil?
end
end
end
class UserSerializer < BaseSerializer
has_many :rosters, embed: :ids
end
class RosterSerializer < BaseSerializer
has_many :users, embed: :ids
end
先ほど言ったように、関連付けはEmberで正常に機能しますが、レールは新しい関連付けデータを取得していないようです。Webインスペクターの[XHR]タブを確認すると、次の情報のみが送信されていることがわかります。
ペイロードのリクエスト{"名簿":{"created_at":"2013年3月21日木曜日23:16:02GMT"、 "team_id": "1"}}
そして、何も変更されていないため、204nocontentエラーで返されます。