Rails 在补丁请求的参数列表中添加一个额外的参数
Rails adds in an extra parameter to the list of parameters on a patch request
我有一个 vue.js 前端,我在其中使用 axios 向端点 /stats/:id 发出 PATCH 请求。这是我发出请求的行:
this.$axios.patch(ApiAddress, { data: this.rows }, {
headers: { Authorization: this.$requestHeaders.Authorization },
});
在这里你可以看到我传递的唯一信息是一个密钥 "data" 和通过路由器传递的 "id" 密钥。但是当控制器收到请求时,我看到以下内容:
{ 数据 => { 示例:"foo" },id=>#,统计 =>{ 数据 => { 示例:"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
非常感谢任何帮助:)。
这是有意的,在Rails (http://api.rubyonrails.org/v5.1/classes/ActionController/ParamsWrapper.html)
中称为wrap_parameters
要完全禁用该行为,请编辑 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: []
我有一个 vue.js 前端,我在其中使用 axios 向端点 /stats/:id 发出 PATCH 请求。这是我发出请求的行:
this.$axios.patch(ApiAddress, { data: this.rows }, {
headers: { Authorization: this.$requestHeaders.Authorization },
});
在这里你可以看到我传递的唯一信息是一个密钥 "data" 和通过路由器传递的 "id" 密钥。但是当控制器收到请求时,我看到以下内容:
{ 数据 => { 示例:"foo" },id=>#,统计 =>{ 数据 => { 示例:"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
非常感谢任何帮助:)。
这是有意的,在Rails (http://api.rubyonrails.org/v5.1/classes/ActionController/ParamsWrapper.html)
中称为wrap_parameters
要完全禁用该行为,请编辑 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: []