【问题标题】:Params hash is empty when POSTing JSONPOST JSON 时参数哈希为空
【发布时间】:2015-10-14 18:51:48
【问题描述】:

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

  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 格式的参数。另外,content_type 是 "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

但是,我不明白为什么?如果 content_type 正确,为什么 rails 不能正确解析我的 json 正文?有什么想法吗?

这是使用 rails '4.2.4'。

【问题讨论】:

    标签: ruby-on-rails ruby json params


    【解决方案1】:

    你需要配置你的 params_warrper.rb:

    在控制器顶部放置:

    wrap_parameters format: [:json]
    

    那么它应该自动将其解析为 JSON。

    【讨论】:

    • 您好,感谢您的帮助。参数哈希仍然为空:/.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2013-08-22
    相关资源
    最近更新 更多