从控制器参数保存Rails模型?

时间:2012-12-20 14:42:31

标签: ruby-on-rails ruby activerecord activemodel

我尝试过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

2 个答案:

答案 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))