Rails 在补丁请求的参数列表中添加了一个额外的参数

Posted

技术标签:

【中文标题】Rails 在补丁请求的参数列表中添加了一个额外的参数【英文标题】:Rails adds in an extra parameter to the list of parameters on a patch request 【发布时间】:2018-07-11 08:59:29 【问题描述】:

我有一个 vue.js 前端,我在其中使用 axios 向端点 /stats/:id 发出 PATCH 请求。这是我提出请求的那一行:

this.$axios.patch(ApiAddress,  data: this.rows , 
          headers:  Authorization: this.$requestHeaders.Authorization ,
        );

在这里您可以看到,我传递的唯一信息是密钥“数据”和通过路由器传递的“id”密钥。但是当控制器收到请求时,我看到以下内容:

数据 => 示例:“foo”,id=>#,stat=> 数据=> 示例:“foo”

我不知道那个“stat”参数是从哪里来的。

这是我的路线:

Rails.application.routes.draw do
  post 'user_token' => 'user_token#create'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  resources :users
  resources :stats
  mount Knock::Engine => "/knock"

  get "profile/:id", to: 'profile#show', as: 'profile'
  get "profile", to: 'profile#index'
end

这是我的统计控制器:

class StatsController < ApplicationController
  before_action :authenticate_user

  def update
    stat = current_user.Stats.find(params[:id])
    # stat.data = params['data']
    param_object = stats_params
    if stat.update(param_object)
      render json: stat
    end
  end

  def stats_params
    params.require(:stat).permit(:data, :title, :privacy)
  end
end

非常感谢任何帮助:)。

【问题讨论】:

您是否在浏览器开发工具中检查了请求的正文? 【参考方案1】:

这是有意的,在 Rails 中称为 wrap_parameters (http://api.rubyonrails.org/v5.1/classes/ActionController/ParamsWrapper.html)

要完全禁用该行为,请编辑config/initializers/wrap_parameters.rb

ActiveSupport.on_load(:action_controller) do
  - wrap_parameters format: [:json]
  + wrap_parameters format: []
end

或编辑您的特定控制器:

class StatsController < ApplicationController
  wrap_parameters format: []

【讨论】:

以上是关于Rails 在补丁请求的参数列表中添加了一个额外的参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中添加视图

向 rails 命令添加额外属性

Rails在我的redis缓存中添加额外的行

Rails:使用参数重定向

求大神帮我解决下webuploader另外添加参数的问题,我知道是formData添加额外参数给后台

php Laravel为请求添加额外参数