Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 7: weekday_selectとweekday_options_for_selectが追加(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails 7: weekday_selectとweekday_options_for_selectが追加(翻訳)

Railsでは手軽に使えるさまざまなフォームヘルパーが既に提供されています。

そこに最近追加されたweekday_helperは、曜日1を選択する便利なドロップダウンリストを提供します。

また、form.selectweekday_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_selectweekday_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に設定されている場合、選択される値は06のいずれかにすべき。
  • :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
  • オプションを値06のインデックスで返す
<!-- 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>

関連記事

Rails 7: belongs_to関連付けに変更トラッキングが追加(翻訳)


  1. 訳注: 原文もヘルパー名もweekday(平日)ですが、実質的に土日も含む「曜日」(day of week)の概念を指しているため、本記事では「曜日」と表記します。英語圏には曜日を1単語で表す言葉がなく、略語のDOWも定着しているとは言えないようです。参考: Weekday Definition & Meaning | Dictionary.com 

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。