7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

理由

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

バージョン

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?