はじめに
- オリジナルアプリ開発で発見したことについて、定着と備忘のためにまとめていきます。
結論
- CSS書けてるはずなのに変化がないときは、以下を確認してみよう
- class名が間違っていないか
- 記述したことが開発ツール上でも表示されているか
-
collection_select
のoptionとHTML属性には{}
を付けよう
経緯
やりたいこと
-
collection_select
で作ったセレクトボックスのスタイリングをしたい
作成したコード(誤り)
#erbファイル
<div class="search-field">
<%= f.label :occupation_id, "職種", class:"search-label" %>
<%= f.collection_select(:occupation_id, Occupation.all, :id, :name, selected: @search_params[:occupation_id], include_blank: "選択しない", class:"search-occupation") %>
</div>
検索フォームの一部でoccupation
モデルから選択出来るようにしています。
collection_select
の具体的な使い方はガイド内をご確認下さい → Railsドキュメント
オプションで下記のものを指定しています。
・ selected:
→ 遷移後に@search_params
の値が選択されるようにしています
・ include_blank:
→ 初期状態(選択していない状態)の値を指定しています
次の箇所で問題が発生しました。
3行目のclass:search-occupation
に対して下記のCSS記述しましたが、適用されませんでした。
#scssファイル
.search-occupation {
width: 100%;
padding: 8px 8px 5px;
outline: none;
}
開発ツールで確認すると、class:"search-occupation"
が指定できていないことが分かりました。(画像3行目)
HTMLでclassが指定できていないため、CSSが無効になっている訳ということですね。
対応には下記の記事を参考にさせて頂きました。
ActionView::Helpers::FormOptionsHelper
【Rails】完全理解 formでセレクトボックスをつくるselectの使い方
railsでf.selectにclassを設定する
今回の対応
collection_select
について調べていく中で、どうやら**option
とHTML属性
には{}
が必要と分かりました。(上述のコードのうち、引数の:name
より後ろの部分)
また、今回のようにoption
が2つある場合は、同じ{}
内に記述する**必要があります。
- OK
{ selected: 〇〇, include_blank: 〇〇}
- NG
{ selected: 〇〇}
,{include_blank: 〇〇}
→ArgumentError
でした
修正したコード
3行目を修正しています
<div class="search-field">
<%= f.label :occupation_id, "職種", class:"search-label" %>
<%= f.collection_select(:occupation_id, Occupation.all, :id, :name, {selected: @search_params[:occupation_id], include_blank: "選択しない"}, {class:"search-occupation"}) %>
</div>
おわりに
- 引数が多いhelperのため、まずは落ち着いてルールを確認したことでスムーズに解決出来ました。
- また、大元の検索機能はこちらの記事を参考にさせて頂きました。
- 初学者ゆえ、記事内に誤りがあるかもしれません。ご指摘等ありましたら、お手数ですがコメントを頂けると幸いです。