スリ飯屋MaLankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする


【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする




今すぐ案件紹介をご希望の方へ


このブログから登録の多いエージェントは下記の3つです★

(リンクをクリックすると公式サイトに飛びます)

【ダントツの1番人気】フォスターフリーランス【案件保有数5000件以上。業界25年の超老舗】

【僅差で2位】フリエン(furien)【実務経験1年未満でも案件アリ!】

【惜しくも3位】レバテックフリーランス【業界最大手。素早く手厚いフォローで案件参画】




こんにちは、mahです。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、


  • 【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする


について書いていきます。




【ActiveAdmin】has_many + nested_attributes_for + allow_destroyなassociation_formで生成される削除ボタンをカスタマイズする



ActiveAdminの、

has_many + accepts_nested_attributes_forを使ったassociation_formで、

allow_destroy: true を追加すると、

削除ボタン(check_box)が生成されますが、

そのデフォルトの削除ボタンをカスタマイズしたい時があります。


f:id:mah666hhh:20201109171459p:plain


これをカスタマイズする方法をご説明します。




結論


「allow_destroy: true」 を使わず、

f.inputのname属性に 「:_destroy」 を指定すればOK。


あとはオプションをつければOKです。



form do |f|
  f.inputs 'Contract' do
    # 親モデル Contract
  end
  
  # 子モデル Option
  f.has_many :options, do |o| # allow_destroy: trueは不要
    o.input :_destroy # こうすると削除ボタンが生成される

    # ラベルを変更するなら下記のような感じ
    o.input :_destroy, label: I18n.t('delete.label')

    # disabledにするなら下記のような感じ
    o.input :_destroy, label: I18n.t('delete.label'), input_html: { disabled: true }
  end
end


  • ラベルを「削除」に変更したボタン

f:id:mah666hhh:20201109170844p:plain




また、

この削除ボタンは、

子モデルから「:_destroy」というname属性として送信するので、

permit_paramsに :_destroyを追加しないと動作しないです。


忘れないようにしましょう。


ActiveAdmin.register Contract do
  # Contractが親モデル Optionが子モデルとする
  # Contractモデルに、accepts_nested_attributes_for [:options] を記述済
  # 下記のように、削除する子モデルの複数形_attributes: [:_destroy]を追加する

  permit_params :options_attributes [:_destroy]

  form do |f|
    f.inputs 'Contract' do
      # 親モデル Contract
    end
  
    # 子モデル Option
    f.has_many :options, do |o| # allow_destroy: trueは不要
      o.input :_destroy # こうすると削除ボタンが生成される

      # ラベルを変更するなら下記
      o.input :_destroy, label: 'ラベルをカスタマイズ'
    end
  end
end


以上です。




RailsやRubyを学びたい人へ


RailsやRubyを学びたい人は、

RailsHack(レイルズハック)という、

最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、

Udemy で下記のコースを受講すると良いです★


✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座

✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】 <- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。

✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう




また、

Udemy は定期的にセールをやっていますし(90%OFFとかもザラ)、

「30日間なら返金できる」ので、

満足できなかった時でも安心です。


f:id:mah666hhh:20201129193352p:plain


【公式】RailsHack(レイルズハック)

【公式】Udemyで学んでみる




最後に


下記の表に、

フリーランスエンジニア向けの人気エージェントをまとめてみました。


エージェント選びで悩んでいる方は是非参考にしてみてくださいね★


エージェント 詳細 最高単価/月 設立
フリエン(furien) 評判をチェック 180万円/月 2011年
ギークスジョブ 評判をチェック 180万円/月 2011年
フォスターフリーランス 評判をチェック 230万円/月 1996年
pe-bank(pebank) 評判をチェック 200万円/月 1989年
Midworks(ミッドワークス) 評判をチェック 200万円/月 2013年
レバテックフリーランス 評判をチェック 140万円/月 2005年




あわせて読みたい


www.malanka.tech


www.malanka.tech


www.malanka.tech


www.malanka.tech