Rails在补丁请求

时间:2018-02-01 05:28:19

标签: ruby-on-rails ruby api vue.js axios

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

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

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

{data => {example:“foo”},id =>#,stat => {data => {例如:“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 个答案:

答案 0 :(得分:1)

这是有意的,在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: []