Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 发布JSON时,参数哈希为空_Ruby On Rails_Ruby_Json_Params - Fatal编程技术网

Ruby on rails 发布JSON时,参数哈希为空

Ruby on rails 发布JSON时,参数哈希为空,ruby-on-rails,ruby,json,params,Ruby On Rails,Ruby,Json,Params,我正在使用脚手架的默认创建方法: def create @user = User.new(firstname: params[:firstname], surname: params[:surname]) respond_to do |format| if @user.save format.html { redirect_to @user, notice: 'User was successfully created.' } fo

我正在使用脚手架的默认创建方法:

  def create
    @user = User.new(firstname: params[:firstname], surname: params[:surname])
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
我知道我没有在那里使用强参数,但不管怎样:

当我使用非常特定的REST客户端发送POST请求时,params散列不包含参数。当我查看request.body时,它包含JSON形式的参数。此外,内容类型是application/json

为了解决这个问题,我不得不

   before_filter :fix_json_params
   [...]
   def fix_json_params
      if request.content_type == "application/json"
        @reparsed_params = JSON.parse(request.body.string).with_indifferent_access
      end
    end

    private

    def params
      @reparsed_params || super
    end
然而,我不明白为什么??如果内容类型正确,为什么rails不能正确解析我的json正文?有什么想法吗


这是在使用rails“4.2.4”。

您需要配置params_warrper.rb:

在控制器顶部放置:

wrap_parameters format: [:json]

然后它会自动将其解析为JSON。

您好,谢谢您的帮助。参数哈希仍然为空:/。