ドキュメントを読み込むのは大事、ということでRailsガイドを頭から読んでいく取り組みをしています。 各章ごとに、(Railsガイドにちゃんと書いてあるのに)知らなかった機能を雑にまとめていきます。
今回は、Action View フォームヘルパーの章です。
fields_for
リンクはこちら
普段Formオブジェクトを使うので、そういえばこんな機能あったな、という感想です。
関連モデルのフォームをfields_for
で簡単に記載できます。
formmethod
リンクはこちら
これを使うことでフォームビルダーの中でHTTPリクエストを上書き指定して送信できるらしい。
ただ、手元の環境(Rails7, turbo使っている)で動かしてみたら、DELETE
は送られず、POST
が送られてしまいました。
Rails7, turboなし環境ではDELETE
のリクエストが飛んだので、rails-turbo
を使っていることが原因ぽいかなと思いましたが、深追いはできてないです。
<%= form.button "Delete", formmethod: :delete, data: { confirm: "Are you sure?" } %>
scaffold
での削除機能のように、素直にbutton_to
を使うのが良さそうに思いました。
オプショングループ
リンクはこちら
Hashを使うことで、セレクトボックスの選択肢をグループ化できる。
<%= form.select :city, { "Europe" => [ ["Berlin", "BE"], ["Madrid", "MD"] ], "North America" => [ ["Chicago", "CHI"] ], }, selected: "CHI" %>
タイムゾーンと国を選択する
リンクはこちら
form.time_zone_select
でタイムゾーンと国の一覧のセレクトボックスが表示される
<%= form.time_zone_select :time_zone %>
個別の一時コンポーネント用のセレクトボックス
リンクはこちら
フォームビルダーとは独立してフォームを作成できる部品。
例えばselect_year
では、APIドキュメントを見ると、選択肢の範囲を決めるオプションなど用意されていました。
<%= select_year 1999, prefix: "party", start_year: 2000, end_year: 2007 %>
チェックボックスのHTTPリクエストの工夫
リンクはこちら
check_boxヘルパーでは、同じ名前で予備の隠し入力を作成しておき、本来送信されないはずのチェックボックス値が見かけ上送信されるようになっています。
確認したところ、以下のようにerbに記載した場合、HTML側ではhidden
としてチェックしていない値が入っていました。
<%= check_box 'attr', 'sample', {}, value='1', value='2' %>
<input name="attr[sample]" type="hidden" value="2" autocomplete="off"> <input type="checkbox" value="1" name="attr[sample]" id="attr_sample">