LoginSignup
9
7

More than 5 years have passed since last update.

Railsでグローバルな定数を定義する(数字を引数として曜日を取得する)

Last updated at Posted at 2019-01-13

※本記事はコメントまで含めて全て読んだ上でご参考にしていただければと思います

理由

  • やりたいこと(数字を引数として曜日を取得したい)に対してもっと良いアプローチがある。
  • 実装にリファクタリングの余地がある。

バージョン

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

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

9
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7