2013-12-10 5 views
3

Я пытаюсь сохранить запись с belongsTo ассоциации, но связанный с ним идентификатор всегда пуст:createRecord с belongsTo ассоциации

Клиент Модель

Docket.Customer = DS.Model.extend({ 
    name:  DS.attr('string'), 
    initial:  DS.attr('string'), 
    description: DS.attr('string'), 
    number:  DS.attr('string'), 
    archived: DS.attr('boolean'), 
    projects: DS.hasMany('project',{ async: true }) 
}); 

Проект Модель

Docket.Project = DS.Model.extend({ 
    name:  DS.attr('string'), 
    description: DS.attr('string'), 
    number:  DS.attr('string'), 
    archived: DS.attr('boolean'), 
    customer: DS.belongsTo('customer') 
}); 

Сохранить действие в ProjectsController

var _this = this; 

// create new record 
var project = this.store.createRecord('project', this.getProperties('name','number', 'description', 'archived')); 

// add customer with id 22 to project 
this.store.find('customer', 22).then(function(customer) { 
    project.set('customer', customer); 
}); 

// save if validation passes, otherwise show errors 
project.save().then(function(){ 
    _this.resetAndCloseForm(form); 
}, function(response){ 
    _this.set('errors',response.errors); 
}); 

JSON отослан на сервер всегда так:

archived: false 
customer_id: null 
description: null 
name: "foobar" 
number: null 

Я хочу, чтобы выбрать клиент проекта в переключателе. Есть ли какие-либо умные способы получить выбранный клиент в качестве записи или мне нужно загрузить его по идентификатору?

{{view Ember.Select 
    viewName="select" 
    contentBinding="customers" 
    optionLabelPath="content.name" 
    optionValuePath="content.id" 
    prompt="Pick a customer:" 
    selectionBinding="selectedCustomer" 
}} 
+0

У меня такая же проблема, вы можете сказать мне, как исправил проблему? – JeskTop

ответ

2

Это старая версия данных Ember, или у вас есть собственный сериалайзер, потому что она должна посылать его без _id. Попробуйте обновить или показать свой сериализатор.

И вы сохраняете, прежде чем найти.

// add customer with id 22 to project 
this.store.find('customer', 22).then(function(customer) { 
    project.set('customer', customer); 


    // save if validation passes, otherwise show errors 
    project.save().then(function(){ 
    _this.resetAndCloseForm(form); 
    }, function(response){ 
    _this.set('errors',response.errors); 
    }); 

}); 

и, похоже, имеет selectedCustomer запись.

// create new record 
var project = this.store.createRecord('project', this.getProperties('name','number', 'description', 'archived')); 

project.set('customer', this.get('selectedCustomer')); 

// save if validation passes, otherwise show errors 
project.save().then(function(){ 
    _this.resetAndCloseForm(form); 
}, function(response){ 
    _this.set('errors',response.errors); 
}); 

вы можете также установить optionValuePath='content'

+0

Да, теперь я сохраняю запись после того, как поиск разрешен, но мне интересно, есть ли более простой способ сделать это. Есть ли способ получить запись клиента непосредственно из selectbox? Я использую Ember Data 1.0.0 Beta 4. И я использую этот 'App.ApplicationSerializer = DS.ActiveModelSerializer.extend ({});' Кроме того, я хочу, чтобы Ember отправил 'customer_id' в мой API. – Slevin

+0

Да, если этот выбор находится в области видимости, см. Edit – Kingpin2k

+0

Работает как шарм :) – Slevin

Смежные вопросы