Railsガイドにきちんと目を通して新しい知識を得る - Action View フォームヘルパー編 -

ドキュメントを読み込むのは大事、ということでRailsガイドを頭から読んでいく取り組みをしています。 各章ごとに、(Railsガイドにちゃんと書いてあるのに)知らなかった機能を雑にまとめていきます。

今回は、Action View フォームヘルパーの章です。

railsguides.jp

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">