我尝试过User.create(params),但这表示“控制器”和“动作”不是可分配的。我可以排除这些属性,但是有更简单的方法来编组我需要的属性吗?
一些例子似乎表明我可以使用params [:user],但是如果我希望帖子只是用户对象,则params [:user]看起来像是nil。
所以我发布了{username:'blah',密码:'blah'},用户名和密码在params中,但不是params [:user]。
class UsersController < ApplicationController
def create
user = User.create(params[:user])
if user.save
render :json => user, :status => :created
else
logger.error user.errors
render :json => {:status => :error, :errors => user.errors}, :status => :bad_request
end
end
end
答案 0 :(得分:2)
Rails项目中有一个约定,其中表单元素以某种方式命名(使用表单助手为您自动执行此操作):
<input type='text' name='user[username]'>
<input type='text' name='user[username]'>
当它们被发布到控制器时,它们将转换为参数散列:
params = {
:user => {
:username => 'whatever',
:password => 'somepass'
}
}
由于路由的工作方式,控制器,操作,id(如果适用)或任何自定义路由部分的键值对被添加到此params散列中。
params.merge!({
:controller => 'users',
:action => 'create'
})
如果您params[:user]
为零,则可能需要更改表单以符合约定。
答案 1 :(得分:1)
尝试User.create(request.request_parameters)
或User.create(JSON.parse(request.body.read))
。