※本記事はコメントまで含めて全て読んだ上でご参考にしていただければと思います
理由
- やりたいこと(数字を引数として曜日を取得したい)に対してもっと良いアプローチがある。
- 実装にリファクタリングの余地がある。
バージョン
ruby '2.5.1'
gem 'rails', '~> 5.2.2'
実装
config/initializers/constants.rb
# frozen_string_literal: true
module WEEKDAY
SUNDAY = '日曜日'
MONDAY = '月曜日'
TUESDAY = '火曜日'
WEDNESDAY = '水曜日'
THURSDAY = '木曜日'
FRIDAY = '金曜日'
SATURDAY = '土曜日'
NAME = {
0 => SUNDAY,
1 => MONDAY,
2 => TUESDAY,
3 => WEDNESDAY,
4 => THURSDAY,
5 => FRIDAY,
6 => SATURDAY
}.freeze
end
irb(main):001:0> WEEKDAY::NAME[0]
=> "日曜日"
参考
Ruby on Railsで定数の指定
文字列をfreezeさせるいくつかの方法
そもそも
Rubyの標準ライブラリに「数字を渡すと曜日を返してくれるメソッドはないのかなぁ。」と探したのですが、見当たらず定数として定義しました。
ただし、コメントにもあるようにi18n
を使用した方が望ましいです。
ここからコメントを参考に追記した箇所
defaultのlocaleを日本に設定する
config/application.rb
module ApplicationName
class Application < Rails::Application
config.i18n.default_locale = :ja
end
end
svenfuchs/rails-i18nからja.yml
をダウンロードする
curl -s https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -o config/locales/ja.yml
config/locales/ja.yml
# 該当箇所のみ
ja:
date:
day_names:
- 日曜日
- 月曜日
- 火曜日
- 水曜日
- 木曜日
- 金曜日
- 土曜日
使い方
irb(main):001:0> I18n.t('date.day_names')
=> ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"]
irb(main):002:0> I18n.t('date.day_names')[0]
=> "日曜日"
# Viewでは`I18n`を省略できます
<%= t('date.day_names')[0] %>
=> "日曜日"
最後に
1つの記事の中に
- Railsでグローバルな定数を定義する
- 数字を引数として曜日を取得する
の2つの内容を盛り込んでしまいましたが、いただいたコメントを活かしたくこのような記載にしました。
見辛くなってしまい、申し訳ございませんm(_ _)m