ActionController::Parametersのマイナーなメソッドを紹介

こんにちは!kossyです!




さて、今回はActionController::Parametersのマイナーなメソッドを
ブログで紹介できればと思います。




環境
Ruby 2.6.3
Rails 6.1.0
MacOS Catalina




公式Documentはこちら

fetch

params.fetch(key, *args)のように呼び出します。

$ params
=> <ActionController::Parameters {"email"=>"test+1@gmail.com", "password"=>"test1234", "controller"=>"devise_token_auth/sessions", "action"=>"create"} permitted: false>

# 存在するkeyを指定した場合
$ params.fetch(:email)
=> "test+1@gmail.com"

# 存在しないkeyを指定した場合
$ params.fetch(:none)
=> ActionController::ParameterMissing: param is missing or the value is empty: none

# 存在しないkeyと第二引数に文字列を渡した場合
$ params.fetch(:none, 'confirm')
=> "confirm"

ユースケースとしては、以下のサイトのやりとりが参考になりました。


has_value?(value)

paramsがvalueを持っているかどうか?を返します。

$ params
=> <ActionController::Parameters {"email"=>"test+1@gmail.com", "password"=>"test1234", "controller"=>"devise_token_auth/sessions", "action"=>"create"} permitted: false>

# 存在するvalueを引数に指定した場合
$ params.has_value?("test1234")
=> true

# 存在しないvalueを指定した場合
$ params.has_value?("none")
=> false

パラメータが特定の値を持っているかどうかを検証したいときに使えるかなと思います。

permitted?

ActionController::Parametersインスタンスがpermitされているかどうかを、
true, or falseで返却します。

# permitされていない時
$ params.permitted?
=> false

# permitされている時
$ params.permit!
=> <ActionController::Parameters {"email"=>"test+1@gmail.com", "password"=>"test1234", "controller"=>"devise_token_auth/sessions", "action"=>"create"} permitted: true>

$ params.permitted?
=> true


勉強になりました。