Wiele do wielu relacji z Ember, ember-data i Rails
Mam problem z próbą zapisania wielu do wielu relacji w Ember.js przy użyciu ember-data i rails. Stowarzyszenie działa dobrze po emberowej stronie, jednak kiedy próbuję zatwierdzić transakcję, nie będzie zawierać listy nowych skojarzeń podczas przesyłania do szyn. Jakakolwiek pomoc byłaby bardzo mile widziana, wyrywałem sobie włosy próbując znaleźć przykładową aplikację, która robi coś tak prostego na githubie, ale nie mogę jej znaleźć.
Oto przytłumiona wersja mojego kodu Embera:
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'
Edytuj formularz:
each user in users_list
label.checkbox
view view.userCheckbox rosterBinding="current_roster" userBinding="user" | #{user.full_name}
Backend Szyn (użycie dziedziczonych zasobów i klejnotów Serializatora aktywnego modelu):
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
Tak jak powiedziałem, skojarzenie działa dobrze na Ember, ale wydaje się, że szyny nie pobierają nowych danych stowarzyszenia. Kiedy sprawdzam kartę XHR w inspektorze internetowym, widzę, że wysłał to tylko:
Request Payload {"roster": {"created_at": "Thu, 21 Mar 2013 23:16:02 GMT", "team_id": "1"}}
I wróciłem z 204 brakiem błędu treści, ponieważ nic się nie zmieniło.