Rails でテーブルからセレクトボックスを生成するときに collection_select
を使うけど,特定のカラムではなくて,複数のカラムを文字列連結して表示したいというシチュエーションがあったので,試してみた.
基本形 (.haml)
users
テーブルに id
と name
カラムがあるという前提で,name
をセレクトボックスとして表示するパターン.
%td = f.collection_select :user_id, @users, :id, :name
モデルにメソッドを実装して呼び出す (.haml)
内容は仮として,user.rb
に view_name_and_id
を実装して,そこに表示する文字列を返すようにする.
class User < ActiveRecord::Base def view_name_and_id self.name + '(' + self.id.to_s + ')' end end
%td = f.collection_select :user_id, @users, :id, :view_name_and_id
デコレータに移して呼び出す (.haml)
あとはまぁ好みの問題かもしれないけど,デコレータに移すのもあり. haml 側は変えずそのままで大丈夫.
module UserDecorator def view_name_and_id self.name + ' (' + self.id + ')' end end
関連エントリー
collection_select - リファレンス - Railsドキュメント
collection_selectに複数カラムのテキスト情報を表示 | Scimpr Blog
プルダウンメニュー(select_tag)の中身をデータベースに用意する - Rails つまみぐい