🙆

Railsのconfigurationを調べてみた(3)

2021/02/16に公開

なに?

Railsのconfigurationはどんなものがあって、どういう挙動なのかを調べてみた。
今回調べたものはActionControllerに含まれるconfigだけである。

# ActionControllerに関するconfigurationは、以下のように`action_controller`をはさむ。
config.action_controller.assets_dir = 'public'

各項目の細かい挙動まで十分に調べきれてはいないが、よく設定する項目などは別途調べたい。

ばーじょん

  • Ruby ruby 2.7.2p137
  • Rails 6.1.2

いちらん

action_on_unpermitted_parameters(boolean, symbol)

Strong Parameterの挙動を指定する。
デフォルトはfalseだが、development or testモードのときは:log

:logの場合は、以下のようなログがpermit時に出力される。

# `http://0.0.0.0:3000?hoge=1`というアクセスに対して
# `params.permit(:fuga)`を実行した場合
Unpermitted parameter: :hoge

:raiseの場合は、以下のようなエラーが発生する。

# `http://0.0.0.0:3000?hoge=1`というアクセスに対して
# `params.permit(:fuga)`を実行した場合
ActionController::UnpermittedParameters (found unpermitted parameter: :hoge):

always_permitted_parameters(array<string>)

Strong Parameterでチェックしないパラメータを指定する。
デフォルトは["controller", "action"]

controller, actionは、Rails内部でparamsに追加されるパラメータなので、本プロパティを設定する場合は、必ず設定した方が良いと思われる。

params.permit!.to_h
# {"hoge"=>"1", "controller"=>"dashboards", "action"=>"index"}

assets_dir(string)

???
デフォルトは#{Rails.root}/public

Rails内部では使われていない???

asset_host(string, proc)

用途はconfig.asset_hostと同じで、ActionView内ではこちらのプロパティが参照される。
デフォルトはconfig.asset_host

cache_store(symbol)

fragmentキャッシュで利用するキャッシュストアを指定する。
デフォルトはconfig.cache_storeで指定したstoreを使い回す。

default_protect_from_forgery(boolean)

CSRF対策のチェックを行うかを指定する。
デフォルトはfalse

ただし、5.2以降のデフォルト設定を読み込むとtrueになる。

また、デフォルトの設定はprotect_from_forgery with: :exceptionとなる。

forgery_protection_origin_check(boolean)

HTTPヘッダーのOriginが、サイトのoriginと一致するかを指定する。
CSRF対策の一つ。
デフォルトはfalse

ただし、5.0以降のデフォルト設定を読み込むとtrueになる。

javascripts_dir(string)

???
デフォルトは#{Rails.root}/public/javascripts

Rails内部では使われていない???

logger(object)

用途はconfig.loggerと同じで、ActionController内ではこちらのプロパティが参照される。
デフォルトはconfig.logger

permit_all_parameters(boolean)

Strong Parameterですべてのパラメータを許可するかを指定する。
デフォルトはfalse

perform_caching(boolean)

fragmentキャッシュやI18nのキャッシュなどを利用するかを指定する。
デフォルトはtrue

per_form_csrf_tokens(boolean)

FormごとにCSRFトークンを発行するかを指定する。
デフォルトはfalse

ただし、5.0以降のデフォルト設定を読み込むとtrueになる。

relative_url_root(string)

用途はconfig.relative_url_rootと同じで、ActionController, ActionView内ではこちらのプロパティが参照される。
デフォルトはconfig.relative_url_root

stylesheets_dir(string)

???
デフォルトは#{Rails.root}/public/stylesheets

Rails内部では使われていない???

urlsafe_csrf_tokens(boolean)

CSRFトークンをURLセーフなフォーマットに変換するかを指定する。
デフォルトはfalse

ただし、6.1以降のデフォルト設定を読み込むとtrueになる。

Discussion