Railsのcollection_check_boxes
メソッドは、複数選択が可能なフォームを簡単に生成できる非常に便利なヘルパーメソッドです。デフォルトの表示ではモデルの特定の属性(例えば名前やID)のみを表示させることが多いですが、カスタマイズすることで他の情報も表示可能です。本記事では、collection_check_boxes
メソッドにブロックを渡すことで、より詳細な情報を含めたカスタマイズを行う方法を紹介します。
基本的な使用法
collection_check_boxes
メソッドの基本的な使用法は以下の通りです。
<%= form.collection_check_boxes :attribute_name, collection, :value_method, :text_method %>
-
:attribute_name
- フォームが操作する属性名。 -
collection
- チェックボックスとして表示するオブジェクトのコレクション。 -
:value_method
- コレクション内の各オブジェクトから値を取得するためのメソッド。 -
:text_method
- コレクション内の各オブジェクトから表示テキストを取得するためのメソッド。
カスタマイズ例
例えば、Service
モデルがあり、各サービスには名前(name
)と所要時間(duration
)が設定されているとします。フォームでは、サービスの名前と所要時間を一緒に表示させたい場合があります。これを実現するには、collection_check_boxes
メソッドにブロックを渡し、カスタマイズします。
<div class="field">
<%= form.label :service_ids %>
<%= form.collection_check_boxes :service_ids, @company.services, :id, :name do |b| %>
<%= b.check_box %>
<%= b.label do %>
<%= "#{b.text} - #{b.object.duration} minutes" %>
<% end %>
<% end %>
</div>
このコードでは、collection_check_boxes
にブロックを渡しています。ブロック変数b
は、コレクションの現在の要素に対応するCheckBoxBuilder
オブジェクトです。b.object
を使用して現在のService
オブジェクトにアクセスし、そのduration
属性を取得しています。b.text
は、collection_check_boxes
の第4引数で指定されたname
メソッドの結果、つまりサービスの名前を返します。
補足説明
-
.object
メソッド:collection_check_boxes
で現在処理しているオブジェクト(この例ではService
インスタンス)にアクセスします。 -
.text
メソッド:collection_check_boxes
の第4引数に指定した属性(この例では:name
)の値を取得します。
この方法を使用することで、単にサービスの名前を表示するだけでなく、所要時間などの追加情報を含めることができます。これにより、フォームを使用するユーザーにとってより多くの情報を提供し、より良いユーザーエクスペリエンスを実現することが可能になります。