我在使用belongsTo关联时遇到问题,并使用Ember.js和ember-data将外键发送到我的Rails控制器。我的Ember.js控制器将项目名称发送到Rails控制器,但不是client_id值。在Rails控制器中,params [:project] [:client_id]为nil。
帮助!我哪里错了?
型号:
DA.Project = DS.Model.extend
name: DS.attr('string')
client: DS.belongsTo('DA.Client')
DA.Client = DS.Model.extend
name: DS.attr('string')
projects: DS.hasMany('DA.Project')
控制器:
DA.ProjectsController = Em.ArrayController.extend
createProject: (project) ->
@transaction = DA.store.transaction()
p = @transaction.createRecord(DA.Project, project)
validation_errors = p.validate()
if validation_errors
DA.displayError validation_errors
else
@transaction.commit()
查看:
DA.ProjectsNew = Em.View.extend
tagName: 'form'
templateName: 'projects/new'
init: ->
@_super()
didInsertElement: ->
@_super()
submit: (event) ->
event.preventDefault()
project = {}
project.name = @get('name')
project.client = @get('client_id')
DA.ProjectsController.createProject(project)
模板:
{{view Em.TextField valueBinding="view.name" placeholder="Project Name" tabindex="1"}}
{{view Em.TextField valueBinding="view.client_id" placeholder="Client ID" tabindex="2"}}
<button type="submit">Create</button>
答案 0 :(得分:3)
在submit
函数中,project.client
被分配了一个id而不是DA.Client
个实例。
如果DA.Client
实例应该预先存在,您可以使用DA.store.find(DA.Client, @get('client_id'))
获取它。
答案 1 :(得分:2)
请注意,根据您绑定的内容,您可以选择与要创建的对象关联的对象,Ember可能会在您只希望获取ID时自动为您提供该对象。例如,使用Ember.Forms.Select视图绑定,此示例中的client_id值将是实际的Client对象实例,而不仅仅是ID。
如果你在App.store.find()调用中盲目地使用这个对象,你将获得一个永远不会被实现的promise对象,并将ID设置为原始对象的序列化。如果您尝试提交此内容,它将尝试保留类似以下内容:
"field_id":"<App.Type:ember123:1>"