Rails 7: weekday_selectとweekday_options_for_selectが追加(翻訳)
Railsでは手軽に使えるさまざまなフォームヘルパーが既に提供されています。
そこに最近追加されたweekday_helper
は、曜日1を選択する便利なドロップダウンリストを提供します。
また、form.select
でweekday_options_for_select
も利用できるようになりました。
変更前
<%# Rails 6.1の場合 %>
<%= form_with(model: employee) do |form| %>
<div class="field">
<%= form.label :weekly_off %>
<%= form.select :weekly_off, I18n.t('date.day_names') %>
<!-- または -->
<%= form.select :weekly_off, I18n.t('date.day_names').map.with_index.to_h %>
</div>
<% end %>
上のコードの出力は以下のようになります。
<select name="employee[weekly_off]" id="employee_weekly_off">
<option value="Sunday">Sunday</option>
<option value="Monday">Monday</option>
<option value="Tuesday">Tuesday</option>
<option value="Wednesday">Wednesday</option>
<option value="Thursday">Thursday</option>
<option value="Friday">Friday</option>
<option value="Saturday">Saturday</option>
</select>
<!-- および -->
<select name="employee[weekly_off]" id="employee_weekly_off">
<option value="0">Sunday</option>
<option value="1">Monday</option>
<option value="2">Tuesday</option>
<option value="3">Wednesday</option>
<option value="4">Thursday</option>
<option value="5">Friday</option>
<option value="6">Saturday</option>
</select>
変更後
Rails 7に、曜日選択のドロップダウンリストを表示するweekday_select
とweekday_options_for_select helper
が追加されました(#42979)。
<%= form_with(model: employee) do |form| %>
<div class="field">
<%= form.label :weekly_off %>
<%= form.weekday_select :weekly_off, {selected: "Mon", day_format: :abbr_day_names} %>
<!-- または -->
<%= form.select :weekly_off, weekday_options_for_select("Mon", day_format: :abbr_day_names) %>
</div>
<% end %>
weekday_options_for_select
それではweekday_options_for_select
の構文と、そこに渡せるオプションを見ていきましょう。
weekday_options_for_select(selected = nil, index_as_value: false, day_format: :day_names)
利用できるオプション
selected
- デフォルトは
nil
注: 以下の例のように、値に応じた正しいデフォルトを提供すること。
index_as_value
がtrueに設定されている場合、選択される値は0
〜6
のいずれかにすべき。:day_format
が:abbr_day_names
に設定されている場合、デフォルトは"Sun"
〜"Mon"
のいずれかにすべき。
<!-- weekday_options_for_select("Monday") -->
<option value="Sunday">Sunday</option>
<option selected="selected" value="Monday">Monday</option>
<option value="Tuesday">Tuesday</option>
<option value="Wednesday">Wednesday</option>
<option value="Thursday">Thursday</option>
<option value="Friday">Friday</option>
<option value="Saturday">Saturday</option>
index_as_value:
- デフォルトは
false
- オプションを値
0
〜6
のインデックスで返す
<!-- weekday_options_for_select("1", index_as_value: true) -->
<option value="0">Sunday</option>
<option selected="selected" value="1">Monday</option>
<option value="2">Tuesday</option>
<option value="3">Wednesday</option>
<option value="4">Thursday</option>
<option value="5">Friday</option>
<option value="6">Saturday</option>
day_format:
- デフォルトは
:day_names
- 短縮表記の曜日として
:abbr_day_names
を渡す
<!-- weekday_options_for_select(day_format: :abbr_day_names) -->
<select name="employee[weekly_off]" id="employee_weekly_off">
<option value="Sun">Sun</option>
<option value="Mon">Mon</option>
<option value="Tue">Tue</option>
<option value="Wed">Wed</option>
<option value="Thu">Thu</option>
<option value="Fri">Fri</option>
<option value="Sat">Sat</option>
</select>
必要に応じて、en.yml
でカスタム曜日表記を追加したり特定言語のロケールを追加したりすることも可能です。
en:
date:
short_day_names: [Su, Mo, Tu, We, Th, Fr, Sa]
<!-- weekday_options_for_select(day_format: :short_day_names) -->
<option value="Su">Su</option>
<option value="Mo">Mo</option>
<option value="Tu">Tu</option>
<option value="We">We</option>
<option value="Th">Th</option>
<option value="Fr">Fr</option>
<option value="Sa">Sa</option>
関連記事
- 訳注: 原文もヘルパー名もweekday(平日)ですが、実質的に土日も含む「曜日」(day of week)の概念を指しているため、本記事では「曜日」と表記します。英語圏には曜日を1単語で表す言葉がなく、略語のDOWも定着しているとは言えないようです。参考: Weekday Definition & Meaning | Dictionary.com ↩
概要
原著者の許諾を得て翻訳・公開いたします。