0

我正在使用 Can.js 创建一条新记录,并将它发送POST /todos到本地 Rails 服务器(rails 3.2.13)。请求中的表单数据title=mow+lawn&completed=true是:

title: mow lawn
completed: true

所以在TodosController,create动作中,默认代码是:

@todo = Todo.new(params[:todo])

但当然,theparams[:todo]是空的,只有params[:title]存在params[:completed]。所以我可以使用

@todo = Todo.new(:title => params[:title], :completed => params[:completed])

这样做,但是有没有办法让它以某种方式自动param从这些参数创建这样的对象?

有人在How can.js add a record to a Rails server?

class TodosController < ApplicationController
  wrap_parameters :todo

但我尝试了每一个

wrap_parameters
wrap_parameters :todo
wrap_parameters :todo, :include => [:name, :complete], 
wrap_parameters :include => [:name, :complete]

仍然Todo.new(params[:todo])无法正常工作。它实际上如何工作或任何其他方法将参数自动打包到对象中?

4

1 回答 1

1

您可以使用

@todo = Todo.new(params.slice(:name, :completed))

为了使其自动化,我想您可以accessible_attributes对模型的方法进行切片:

@todo = Todo.new(params.slice(*Todo.accessible_attributes))
于 2013-04-13T00:52:26.323 回答