Rails の Controller で Strong Parametersを使う場合、 ***_params
というプライベートメソッドを定義しています。
一方、Active Admin の Controller で Strong Parameters を使う時は、デフォルトだとどんな名前になるのかを調べた時のメモです。
目次
環境
- Rails 6.1.4
- Active Admin 2.9.0
permitted_params で取り出せた
公式ドキュメントにありました。
Setting up Strong Parameters | Active Admin | The administration framework for Ruby on Rails
permit_params
で定義した項目は、 permitted_params
から取り出せます。
そこで、前回の記事で使ったActive Adminのコードを一部修正し、
ActiveAdmin.register Fruit do permit_params :name, :color # 定義 # コントローラのcreate/update/destroyをオーバーライド controller do def create super do |format| # Strong Parameters から取り出し call_api_with_params(permitted_params[:fruit][:name]) end end def call_api_with_params(name) logger.info("======> call api with #{name}") end end end
のように、
create
メソッドをオーバーライド- createメソッドの中で、StrongParametersの
name
を使ってAPIを呼ぶ- 今回はログに出力するだけ
な実装としました。
そして、Active Adminの画面で
- name: ぶどう
- color: #b46fe2
- start_of_sales: 2021/7/19 00:04
の値を入力して保存します。
すると、ログには
Started POST "/admin/fruits" for 127.0.0.1 at 2021-07-19 00:04:11 +0900 Processing by Admin::FruitsController#create as HTML Parameters: {"authenticity_token"=>"[FILTERED]", "fruit"=>{"name"=>"ぶどう", "color"=>"#b46fe2", "start_of_sales(1i)"=>"2021", "start_of_sales(2i)"=>"7", "start_of_sales(3i)"=>"19", "start_of_sales(4i)"=>"00", ... Unpermitted parameters: :start_of_sales(1i), :start_of_sales(2i), :start_of_sales(3i), :start_of_sales(4i), :start_of_sales(5i) ======> call api with ぶどう
と出力されました。
permitted_params[:fruit][:name]
で ぶどう
が取り出せていました。
permitted_paramsのオーバーライド
Active Adminのデフォルトでは permit_params
にて制御しています。
ただ、何らかの理由によりStrong Paramterの値を変更したい場合は、 permitted_params
メソッドをオーバーライドします。
例えば
ActiveAdmin.register Fruit do permit_params :name, :color # コントローラのcreate/update/destroyをオーバーライド controller do # ... def permitted_params params.permit(:fruit => [:name]) # 以下の書き方だとエラーになる # param is missing or the value is empty: fruit # params.require(:fruit).permit(:name) end # ...
のようにすると、ログには
Unpermitted parameters: :color, :start_of_sales(1i), :start_of_sales(2i), :start_of_sales(3i), :start_of_sales(4i), :start_of_sales(5i) Unpermitted parameters: :authenticity_token, :commit {"fruit"=>#<ActionController::Parameters {"name"=>"ぶどう"} permitted: true>} ======> call api with ぶどう
のように出力されました。
Active Adminの結果も、以下のように color
の値が入りませんでした。
なお、上記以外の書き方については、Active Adminのドキュメントや、Inherited ResourcesのREADMEにも記載がありました。
- https://activeadmin.info/2-resource-customization.html#setting-up-strong-parameters
- https://github.com/activeadmin/inherited_resources#strong-parameters
ソースコード
Githubに上げました。
https://github.com/thinkAmi-sandbox/rails_with_active_admin_app
関係するプルリクはこちらです。
https://github.com/thinkAmi-sandbox/rails_with_active_admin_app/pull/2