1

我尝试了 User.create(params),但这表明“控制器”和“动作”不能批量分配。我可以排除这些属性,但是有没有更简单的方法来编组我需要的属性?

一些示例似乎表明我可以使用 params[:user],但如果我希望帖子只是用户对象,params[:user] 看起来就像是 nil。

所以我用 {username: 'blah', password: 'blah'} 发布,用户名和密码在参数中,但不是参数 [: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
4

2 回答 2

2

在 Rails 项目中有一个约定,表单元素以某种方式命名(使用表单助手会自动为您执行此操作):

<input type='text' name='user[username]'>
<input type='text' name='user[username]'>

当它们发布到控制器时,它们将转换为参数哈希:

params = {
  :user => {
    :username => 'whatever',
    :password => 'somepass'
  }
}

由于路由的工作方式,控制器、操作、id(如果适用)或任何自定义路由部分的键值对被添加到此参数哈希中。

params.merge!({
  :controller => 'users',
  :action     => 'create'
})

如果params[:user]对您来说是 nil,您可能需要更改表单以符合约定。

于 2012-12-20T15:00:30.503 回答
1

尝试User.create(request.request_parameters)User.create(JSON.parse(request.body.read))

于 2012-12-20T14:59:27.843 回答