Ruby on rails 未写入Rails Rest Post参数哈希

Ruby on rails 未写入Rails Rest Post参数哈希,ruby-on-rails,rest,hash,Ruby On Rails,Rest,Hash,我正在使用Rails构建我的第一个RESTAPI,有一个我无法解决的简单问题 基本上,我无法从httpPUSH请求将params散列写入数据库 我在Api名称空间下有以下用户控制器,带有创建操作 class Api::UserController < ApplicationController http_basic_authenticate_with :name => "test", :password => "test" skip_before_act

我正在使用Rails构建我的第一个RESTAPI,有一个我无法解决的简单问题

基本上,我无法从http
PUSH
请求将params散列写入数据库

我在Api名称空间下有以下用户控制器,带有创建操作

class Api::UserController < ApplicationController
      http_basic_authenticate_with :name => "test", :password => "test"
      skip_before_action :verify_authenticity_token

      def create
             @user = User.create(params[:user])
              respond_to do |format|
                      if @user.save
                              format.json{render json: @user, status: :created, location: @user} #render create full response
                      else
                              format.json{render json: @user.errors, status: :unprocessable_entity}
                      end
              end
      end
end 
用户模型没有包含名称和地址字符串

为了测试REST调用,我设置了firefox插件
RESTeasy
RESTclient
使用此URL
http://localhost:3000/api/user/

这个身体呢 { “名称”:“timoteo”, “地址”:“柏林” }

到目前为止还不错。现在,在发送此包之后,Webrick向我提供以下输出:

Started POST "/api/user" for ::1 at 2015-08-03 17:06:50 +0200
Processing by Api::UserController#create as JSON
 Parameters: {"name"=>"timoteo", "address"=>"berlin"}
  (1.2ms)  BEGIN
  SQL (0.6ms)  INSERT INTO "users" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", "2015-08-03 15:06:50.646169"], ["updated_at", "2015-08-03 15:06:50.646169"]]
  (42.8ms)  COMMIT
  (0.3ms)  BEGIN
  (0.3ms)  COMMIT
 Completed 201 Created in 66ms (Views: 1.4ms | ActiveRecord: 48.1ms)
忽略这两个参数,在数据库中存储一条空记录(REST客户端也会显示相同的结果)


谁能给我一个提示,在路上可能出了什么问题。我假设这是与params散列有关的内容,但我还没有弄清楚。

将验证添加到您的模型中:

class User < ActiveRecord::Base
   validates_presence_of :name
   validates_presence_of :address
end
UPD。您还可以从接受的白名单参数中获益:

@user = User.create(params.require(:name, :address))
这样,Rails将错误地响应,说参数丢失,并且不会将任何其他属性分配给用户(您不希望分配这些属性)。

当您的用户创建为
@user=user.create(params[:user])时,您的
{“name”:“timoteo”,“address”:“berlin”}
参数不正确。

您的参数应该看起来更像:
{“user”:{“name”:“timoteo”,“address”:“berlin”}
,因为您正在访问
params[:user]
,所以用户属性需要属于参数的用户部分

如果保存没有姓名/地址的用户也不正确,则添加验证可能会有所帮助

class User < ActiveRecord::Base
  validates :name, presence: true
  validates :address, presence: true
  # etc...
end
class用户
嘿,谢谢你的回答。我有一些验证,但为了使模型更简单而排除了它。使用validate_presence_of:name并将保存更改为persistend,我将无法再写了。RESTclient返回这个json消息{“name”:[“不能为空”]}。插入操作看起来和以前一样请从显示参数的日志中给出一行(
参数:{…}
)哦,我在您的原始答案中看到了。似乎您需要像其他响应程序建议的那样修复参数哈希({user:{name:…,address:…}),然后一切正常。尝试重新启动服务器。确定列表是以下参数:{“name”=>“timoteo”,“address”=>“berlin”}当我忽略主体并使用此URL时,它会给出相同的结果。因此,我认为这不是ClientsYeah,您需要更改参数,或者将
params[:user]
更改为
params.permit(:name,:address)
谢谢你的回答。我想我现在理解了散列名称和发送参数之间的关系。我尝试了你建议的散列,我也包括了验证,但结果是一样的。开始发布“/api/user/”for::1于2015-08-03 17:58:18+0200由api::UserController处理#创建为JSON(2.0ms)开始(0.3ms)回滚已完成422个不可处理实体当您发出该请求时,日志中显示的参数是什么?这是日志参数中的参数列表:{{{{{“name\”:“timoteo\”,“address\”:“berlin\”}=>nil}未经允许的参数:{{“name”:“timoteo”,“address:“berlin”},格式我现在已更改参数[:user]至参数许可证(:名称:地址)
if @user.persisted?
  format.json{render json: @user, status: :created, location: @user} #render create full response
else
  format.json{render json: @user.errors, status: :unprocessable_entity}
end
@user = User.create(params.require(:name, :address))
class User < ActiveRecord::Base
  validates :name, presence: true
  validates :address, presence: true
  # etc...
end