collection_check_boxes
を使用する機会があったので備忘録として残しておこうと思います。
##やったこと
- collection_check_boxesで複数のカラムを表示する
##各言語のバージョン・開発環境
- ruby 2.4.1
- Rails 5.1.4
- haml 5.0.3
- Bootstrap 4.0.0.beta
##画面の遷移イメージ
グループの一覧ページがあります。
「所属ユーザー一覧ボタン」がクリックされると「所属ユーザー一覧」へ遷移します。
「ユーザー追加/除外ボタン」がクリックされると「メンバー登録」へ遷移します。
※書いててここのボタンの表示はユーザーよりもメンバーの方が適切だなと思いましたが、修正が面倒なので進みます。
メンバー登録の周りのソースコード
members_controller
def index
@group = Group.find(params[:group_id])
@users = User.all
end
index.html.haml
= form_with(model: @group, url: admin_group_members_path, group_id: @group.id, local: true) do |form|
#第3引数に指定したものが、checkboxのvalue値に、第4引数に指定したものが text値になる。
= form.collection_check_boxes(:user_ids, @users, :id, :name) do |user|
= user.label { user.check_box + user.text }
= form.submit class: "btn btn-primary float-right"
##collection_check_boxesで複数のカラムを表示する
メンバー登録において、ユーザーのアカウント名(name) だけではなく、メールアドレス(email)も表示したい時はcollection_check_boxes
の箇所を以下の様に変更すれば、メールアドレス表示させることができます。
= form.collection_check_boxes(:user_ids, @users, :id, :name) do |user|
= user.label do
= user.object.name
= user.object.email
= user.check_box
これにBootstrapを当てていい感じのテーブルにすると以下の様なコードになります。
= form_with(model: @group, url: admin_group_members_path, group_id: @group.id, local: true) do |form|
%table#group_list.table.table-striped
%thead
%tr
%th ユーザ名
%th メールアドレス
%th 追加/除外
%tbody
= form.collection_check_boxes :user_ids, User.all, :id, :name do |user|
= user.label do
%tr
%td= user.object.name
%td= user.object.email
%td= user.check_box
参考にさせていただきました。
collection_check_boxesメソッドの構造確認