LoginSignup
0
0

Railsのcollection_check_boxesのカスタマイズ

Posted at

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)の値を取得します。

この方法を使用することで、単にサービスの名前を表示するだけでなく、所要時間などの追加情報を含めることができます。これにより、フォームを使用するユーザーにとってより多くの情報を提供し、より良いユーザーエクスペリエンスを実現することが可能になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0