LoginSignup
4
0

More than 1 year has passed since last update.

railsのwrap_paramerterがやっている事と設定の方法について

Posted at

wrap_paramerterとは

コントローラーの名前からリソースの名前を推測してリクエストパラメータをリソースの名前でラップする仕組みの設定を行います。

rails6.1までのrailsアプリケーションではrails newした際にconfig/initializers/wrap_parameters.rbというファイルが作成されます。

config/initializers/wrap_parameters.rb
# Be sure to restart your server when you modify this file.

# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.

# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

# To enable root element in JSON for ActiveRecord objects.
# ActiveSupport.on_load(:active_record) do
#   self.include_root_in_json = true
# end

やっている事

コントローラー名からモデル名を推測し、元のパラメーターをストロングパラメーターに対応させるようにモデル名でラップして新しいパラメーターを作ります。

'モデル名': {attributes}

例えば、コントローラーがUsersControllerの場合railsはコントローラーの名前からUserモデルがあると推測し、Userモデルのattributeを取得しattributesと同じ名前(=attribute_names)のパラメータキーが渡ってきた場合にラップの対象にします。

user: { name:, email: }

設定方法

ラップパラメーターを使うかどうかは前述のconfig/initialisers/wrap_paramerter.rbで可能です。デフォルトではリクエストのcontent_typeがjson場合はリクエストパラメーターをラップさせる様に設定されます。

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

または、コントローラー単位で個別で指定することも可能です。

class UsersController < ApplicationController
  wrap_parameters format: [:json, :xml, :url_encoded_form, :multipart_form]
end
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0