基本的にboolean型の値をドロップダウンで表示することはないと思うんですが、仕事でそうしないといけない状況があり、手こずったので書き留めておきます。
したいこと:”10日”と”1日”のドロップダウンを作る。10日を選んだ時はtrue、1日を選んだ時はfalseをデータベースに送信する。
まずはerbファイル。最初はrequired: trueを書いていたのだけど、うまく動作せずinclude_blankに変更。
qiita.html.erb
<div class="form-group">
<%= f.label :pay_day %>
<%= f.select :pay_day, payment_day, { include_blank: false }, class: "form-control" %>
</div>
modelファイルにメソッドを追加。trueとfalseはkeyとして使えないのでinvertを使って逆に書くことに。これをしないとrubocopエラーが、、、
qiita.rb
PAYMENTDAY = { "10日": "true", "1日": "false" }.invert.freeze
erbに記載していたpayment_dayメソッドをapplication_helperに追加。
select_fieldは配列で値を受け取る必要があるため、keyとvalueをループさせmapメソッドに入れる。
application_helper.rb
def payment_day
QIITA::PAYMENTDAY.map { |k, v| [v, k] }
end