古いバージョンのドキュメントです。最新のバージョンはRails7.0.0

Railsドキュメント(v6.0.2.1)

アクティブサポートとは

layout: page

説明

Ruby標準ライブラリの拡張

ビュー以外でヘルパーを呼び出す

layout: page

説明

コントローラやモデル、パッチ処理など、ビュー以外でヘルパーを使いたい場合

使い方

ApplicationController.helpers.<メソッド名>

ApplicationController.helpers.user_path

真偽判定

layout: page

説明

条件式を評価し,true(真)かnilやfalse(偽)を判定

使い方

nil?

変数.nil?

Rubyの標準メソッド。nilの場合のみtrueを返し、それ以外はfalse

empty?

変数.empty?

Rubyの標準メソッド。空の文字列や空の配列の場合にtrueを返す。nilに対して呼び出すとNoMethodErrorが発生

blank?

変数.blank?

nil? + empty? のようなメソッド。nilまたは空のオブジェクトをチェック nil, “”, “ “(半角スペースのみ), 空の配列, 空のハッシュのときにfalseを返します Railsで拡張されたメソッドで、Rubyのみでは使えないのでご注意ください

present?

変数.present?

!blank? を実行するメソッド。if 変数.present?とunless 変数.blank?は同じ意味 nil, “”, “ “(半角スペースのみ), 空の配列, 空のハッシュのときにfalseを返します Railsで拡張されたメソッドで、Rubyのみでは使えないのでご注意ください

@pages = Page.all
if @pages.present?
...
else
puts "no pages"
end

複数形へ変換

layout: page

説明

文字列内の単語の複数形

使い方

名詞.pluralize([個数, ロケール])

postの複数形

'post'.pluralize
# "posts"

octopusの複数形

'octopus'.pluralize
# "octopi"

sheepの複数形

'sheep'.pluralize
# "sheep"

wordsの複数形

'words'.pluralize
# "words"

単語から複数形

'the blue mailman'.pluralize
# "the blue mailmen"

CamelOctopusの複数形

'CamelOctopus'.pluralize
# "CamelOctopi"

appleの単数形

'apple'.pluralize(1)
# "apple"

appleの複数形

'apple'.pluralize(2)
# "apples"

ロケール指定

'ley'.pluralize(:es)
# "leyes"

ソースコード

単数形へ変換

layout: page

説明

複数形の名詞を単数形に変換
「config/initializers/inflections.rb」に定義を追加することによって、不可算名詞の追加が可能

使い方

singularize(文字列 [, ロケーション])

複数形の名詞を単数形に変換

singularize('posts')
# "post"

不可算名詞

singularize('octopi')
# "octopus"

不可算名詞

singularize('sheep')
# "sheep"

キャメルケース

singularize('CamelOctopi')
# "CamelOctopus"

ロケーション指定

singularize('leyes', :js)
# "ley"

ソースコード

クラス名からファイル名へ変換

layout: page

説明

クラス名からファイル名へ変換
「config/initializers/inflections.rb」に定義を追加することによって追加

使い方

underscore("文字列")

「Product」を変換

underscore("Product")
# "product"

「AdminUser」を変換

underscore("AdminUser")
# "admin_user"

「Backoffice::Session」を変換

underscore("Backoffice::Session")
# "backoffice/session"

ソースコード

文字列をキャメルケースに変換

layout: page

説明

文字列をキャメルケースに変換
ファイル名からクラス名へ変換など

使い方

camelize(文字列 [, オプション])

オプション

オプション 説明 デフォルト値
:lower ローワーキャメルケース  
:upper キャメルケース o

キャメルケース
camelize('product')
# "Product"

「/」を含む文字の変換

camelize('backoffice/session')
# "Backoffice::Session"

ローワーキャメルケース

camelize('active_record'. :lower)
# "activeRecord"

ソースコード

モデルクラス名からテーブル名へ変換

layout: page

説明

モデル名からテーブル名へ変換
「config/initializers/inflections.rb」に定義を追加することによって追加

使い方

tableize(文字列)

「Page」を変換

tableize("Page")
# "pages"

「AdminUser」を変換

tableize("AdminUser")
# "admin_users"

ソースコード

テーブル名からモデルクラス名へ変換

layout: page

説明

テーブル名からモデル名へ変換
「config/initializers/inflections.rb」に定義を追加することによって可能

使い方

classify(テーブル名)

「people」を変換

classify("people")
# "Person"

ソースコード

layout: page

tomorrow

説明

翌日の日付を取得

使い方

日付.tomorrow

翌日の日付を取得
Date.new(2011, 12, 24).tomorrow
#  Sun, 25 Dec 2011

その他

標準関数で代替
Date.new(2011, 12, 24) + 1
#  Sun, 25 Dec 2011

yesterday

説明

前日の日付を取得

使い方

日付.yesterday

翌日の日付を取得
Date.new(2011, 12, 24).yesterday
#  Fri, 23 Dec 2011

その他

標準関数で代替
Date.new(2011, 12, 24) - 1
#  Fri, 23 Dec 2012

prev_year

説明

前の年の日付を取得

使い方

日付.prev_year

去年の日付を取得
Date.new(2011, 12, 24).prev_year
#  Fri, 24 Dec 2010

その他

標準関数で代替
Date.new(2011, 12, 24) << 12
#  Fri, 24 Dec 2010

next_year

説明

次の年の日付を取得

使い方

日付.next_year

来年の日付を取得
Date.new(2011, 12, 24).next_year
#  Mon, 24 Dec 2012

その他

標準関数で代替
Date.new(2011, 12, 24) >> 12
#  Mon, 24 Dec 2012

prev_month

説明

前の月の日付を取得

使い方

日付.prev_month

先月の日付を取得
Date.new(2011, 12, 24).prev_month
# Thu,  24 Nov 2011

その他

標準関数で代替
Date.new(2011, 12, 24) << 1
# Thu, 24 Nov 2011

next_month

説明

次の月の日付を取得

使い方

日付.next_month

来月の日付を取得
Date.new(2011, 12, 24).next_month
# Tue,  24 Jan 2012

その他

標準関数で代替
Date.new(2011, 12, 24) >> 1
#  Tue, 24 Jan 2012

beginning_of_week

説明

週の初めの日付を取得

使い方

日付.beginning_of_week

今週の終わりの日付を取得
Date.new(2011, 12, 24).beginning_of_week
# Mon, 19 Dec 2011

end_of_week

説明

週の終わりの日付を取得

使い方

日付.end_of_week

今週の終わりの日付を取得
Date.new(2011, 12, 24).end_of_week
# Sun, 25 Dec 2011

next_week

説明

来週の日付を取得

使い方

日付.next_week

来週の初めの日付を取得
Date.new(2011, 12, 24).next_week
# Mon, 26 Dec 2011
来週の土曜日の日付を取得
Date.new(2011, 12, 24).next_week(:saturday)
# Sat, 31 Dec 2011

prev_week

説明

先週の日付を取得

使い方

日付.prev_week

先週の初めの日付を取得
Date.new(2011, 12, 24).prev_week
# Mon, 12 Dec 2011
先週の土曜日の日付を取得
Date.new(2011, 12, 24).prev_week
# Sat, 17 Dec 2011

beginning_of_month

説明

月の初めの日付を取得

使い方

日付.beginning_of_month

今月の初めの日付を取得
Date.new(2011, 12, 24).beginning_of_month
# Thu, 01 Dec 2011

end_of_month

説明

月の終わりの日付を取得

使い方

日付.end_of_month

今月の終わりの日付を取得
Date.new(2011, 12, 24).end_of_month
# Sat, 31 Dec 2011

beginning_of_quarter

説明

四半期の初めの日付を取得

使い方

日付.beginning_of_quarter

四半期の初めの日付を取得
Date.new(2011, 12, 24).beginning_of_quarter
# Sat, 01 Oct 2011

end_of_quarter

説明

四半期の終わりの日付を取得

使い方

日付.end_of_quarter

四半期の終わりの日付を取得
Date.new(2011, 12, 24).end_of_quarter
# Sat, 31 Dec 2011

beginning_of_year

説明

年の初めの日付を取得

使い方

日付.beginning_of_year

今年の初めの日付を取得
Date.new(2011, 12, 24).beginning_of_year
# Sat, 01 Jan 2011

end_of_year

説明

年の終わりの日付を取得

使い方

日付.end_of_year

今年の終わりの日付を取得
Date.new(2011, 12, 24).end_of_year
# Sat, 31 Dec 2011

years_ago

説明

○年前の日付を取得

使い方

日付.years_ago(年数)

10年前の日付を取得
Date.new(2011, 12, 24).years_ago(10)
# Mon, 24 Dec 2001

years_ago

説明

○年前の日付を取得

使い方

日付.years_ago(年数)

10年前の日付を取得
Date.new(2011, 12, 24).years_ago(10)
# Mon, 24 Dec 2001

years_since

説明

○年後の日付を取得

使い方

日付.years_since(年数)

10年後の日付を取得
Date.new(2011, 12, 24).years_since(10)
# Fri, 24 Dec 2021

months_ago

説明

○月前の日付を取得

使い方

日付.months_ago(月数)

2月前の日付を取得
Date.new(2011, 12, 24).months_ago(2)
# Mon, 24 Oct 2011

months_since

説明

○月後の日付を取得

使い方

日付.months_since(月数)

2月後の日付を取得
Date.new(2011, 12, 24).months_since(2)
# Fri, 24 Feb 2012

weeks_ago

説明

○週前の日付を取得

使い方

日付.weeks_ago(週数)

2週前の日付を取得
Date.new(2011, 12, 24).weeks_ago(2)
# Sat, 10 Dec 2011

advance

説明

特定の日時前の日付を取得

使い方

日付.advance(日付のハッシュ)

2ヶ月後の2日前の日付を取得
Date.new(2011, 12, 24).advance(months: 2, days: -2)
# Wed, 22 Feb 2011

change

説明

特定の日時前の日付を取得

使い方

日付.change(日付のハッシュ)

2ヶ月後の2日前の日付を取得
Date.new(2011, 12, 24).change(months: 2, days: -2)
# Sat, 24 Dec 2011

日付の計算

説明

日付を足したり、引いたりする

使い方

日付 (+ or -) 日付

2日後の日付を計算
Date.new(2011, 12, 24) + 2.day
# Mon, 26 Dec 2011
1年前の日付を計算
Date.new(2011, 12, 24) - 1.year
# Fri, 24 Dec 2010

beginning_of_day

説明

初めの時刻を取得

使い方

日付.beginning_of_day

今日の初めの時刻を取得
Date.new(2011, 12, 24).beginning_of_day
# Sat, 24 Dec 2011 00:00:00 JST +09:00

beginning_of_hour

説明

初めの分を取得

使い方

日付.beginning_of_hour

今日の初めの時刻を取得
Date.new(2011, 12, 24, 10, 55, 55).beginning_of_hour
# Sat, 24 Dec 2011 10:00:00 JST +09:00

end_of_day

説明

終わりの時刻を取得

使い方

日付.end_of_day

今日の1秒後の時刻を取得
Date.new(2011, 12, 24).end_of_day
# Sat, 24 Dec 2011 23:59:59 JST +09:00

ago

説明

○秒前の時刻を取得

使い方

日付.ago(秒数)

今日の1秒前の時刻を取得
Date.new(2011, 12, 24).ago(1)
# Sat, 23 Dec 2011 23:59:59 JST +09:00

since

説明

○秒後の時刻を取得

使い方

日付.since(秒数)

今日の1秒後の時刻を取得
Date.new(2011, 12, 24).since(1)
# Sat, 24 Dec 2011 00:00:01 JST +09:00

日時関連

layout: page

説明

日時関連の便利関数

tomorrow

説明

翌日の日時を取得

使い方

日時.tomorrow

翌日の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).tomorrow
#  Sun, 25 Dec 2011 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24, 00, 00, 00) + 1
#  Sun, 25 Dec 2011 00:00:00 +0000

yesterday

説明

前日の日時を取得

使い方

日時.yesterday

前日の日時を取得
DateTime.new(2011, 12, 24).yesterday
#  Fri, 23 Dec 2011 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24) - 1
#  Fri, 23 Dec 2011 00:00:00 +0000

prev_year

説明

去年の日時を取得

使い方

日時.prev_year

去年の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).prev_year
#  Fri, 24 Dec 2010 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24, 00, 00, 00) << 12
#  Fri, 24 Dec 2010 00:00:00 +0000

next_year

説明

来年の日時を取得

使い方

日時.next_year

来年の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).next_year
#  Mon, 24 Dec 2012 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24, 00, 00, 00) >> 12
#  Mon, 24 Dec 2012 00:00:00 +0000

prev_month

説明

先月の日時を取得

使い方

日時.prev_month

先月の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).prev_month
# Thu,  24 Nov 2011 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24, 00, 00, 00) << 1
# Thu,  24 Nov 2011 00:00:00 +0000

next_month

説明

来月の日時を取得

使い方

日時.next_month

来月の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).next_month
# Tue,  24 Jan 2012 00:00:00 +0000

その他

標準関数で代替
DateTime.new(2011, 12, 24, 00, 00, 00) >> 1
# Tue,  24 Jan 2012 00:00:00 +0000

beginning_of_week

説明

週の初めの日時を取得

使い方

日時.beginning_of_week

今週の終わりの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_week
# Mon, 19 Dec 2011 00:00:00 +0000

end_of_week

説明

週の終わりの日時を取得

使い方

日時.end_of_week

今週の終わりの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).end_of_week
# Sun, 25 Dec 2011 23:59:59 +0000

next_week

説明

次の週の日時を取得

使い方

日時.next_week

来週の初めの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).next_week
# Mon, 26 Dec 2011 00:00:00 +0000
来週の土曜日の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).next_week(:saturday)
# Sat, 31 Dec 2011 00:00:00 +0000

prev_week

説明

前の週の日時を取得

使い方

日時.prev_week

先週の初めの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).prev_week
# Mon, 12 Dec 2011 00:00:00 +0000
先週の土曜日の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).prev_week
# Sat, 17 Dec 2011 00:00:00 +0000

beginning_of_month

説明

月の初めの日時を取得

使い方

日時.beginning_of_month

今月の初めの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_month
# Thu, 01 Dec 2011 00:00:00 +0000

end_of_month

説明

月の終わりの日時を取得

使い方

日時.end_of_month

今月の終わりの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).end_of_month
# Sat, 31 Dec 2011 23:59:59 +0000

beginning_of_quarter

説明

四半期の初めの日時を取得

使い方

日時.beginning_of_quarter

四半期の初めの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_quarter
# Sat, 01 Oct 2011 00:00:00 +0000

end_of_quarter

説明

四半期の終わりの日時を取得

使い方

日時.end_of_quarter

四半期の終わりの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).end_of_quarter
# Sat, 31 Dec 2011 23:59:59 +0000

beginning_of_year

説明

年の初めの日時を取得

使い方

日時.beginning_of_year

今年の初めの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_year
# Sat, 01 Jan 2011 00:00:00 +0000

end_of_year

説明

年の終わりの日時を取得

使い方

日時.end_of_year

今年の終わりの日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).end_of_year
# Sat, 31 Dec 2011 23:59:59 +0000

years_ago

説明

○年前の日時を取得

使い方

日時.years_ago(年数)

10年前の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).years_ago(10)
# Mon, 24 Dec 2001 00:00:00 +0000

years_since

説明

○年後の日時を取得

使い方

日時.years_since(年数)

10年後の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).years_since(10)
# Fri, 24 Dec 2021 00:00:00 +0000

months_ago

説明

○月前の日時を取得

使い方

日時.months_ago(月数)

2月前の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).months_ago(2)
# Mon, 24 Oct 2011 00:00:00 +0000

months_since

説明

○月後の日時を取得

使い方

日時.months_since(月数)

2月後の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).months_since(2)
# Fri, 24 Feb 2012 00:00:00 +0000

weeks_ago

説明

○週前の日時を取得

使い方

日時.weeks_ago(週数)

2週前の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).weeks_ago(2)
# Sat, 10 Dec 2011 00:00:00 +0000

advance

説明

前の日時を取得

使い方

日時.advance(日時のハッシュ)

2ヶ月後の2日前の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).advance(months: 2, days: -2)
# Wed, 22 Feb 2011 00:00:00 +0000

change

説明

前の日時を取得

使い方

日時.change(日時のハッシュ)

2ヶ月後の2日前の日時を取得
DateTime.new(2011, 12, 24, 00, 00, 00).change(months: 2, days: -2)
# Sat, 24 Dec 2011 00:00:00 +0000

日時の計算

説明

日時を足したり、引いたりする

使い方

日時 (+ or -) 日時

2日後の日時を計算
DateTime.new(2011, 12, 24, 00, 00, 00) + 2.day
# Mon, 26 Dec 2011 00:00:00 +0000
1年前の日時を計算
DateTime.new(2011, 12, 24, 00, 00, 00) - 1.year
# Fri, 24 Dec 2010 00:00:00 +0000

beginning_of_day

説明

日の初めの時刻を取得

使い方

日時.beginning_of_day

今日の初めの時刻を取得
DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_day
# Sat, 24 Dec 2011 00:00:00 +0000

beginning_of_hour

説明

時間の初めの時刻を取得

使い方

日時.beginning_of_hour

DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_hour

beginning_of_minute

説明

分の初めの時刻を取得

使い方

日時.beginning_of_minute

DateTime.new(2011, 12, 24, 00, 00, 00).beginning_of_minute

end_of_day

説明

終わりの時刻を取得

使い方

日時.end_of_day

今日の1秒後の時刻を取得
DateTime.new(2011, 12, 24, 00, 00, 00).end_of_day
# Sat, 24 Dec 2011 23:59:59 +0000

end_of_hour

説明

終わりの時刻を取得

使い方

日時.end_of_hour

DateTime.new(2011, 12, 24, 00, 00, 00).end_of_hour

end_of_minute

説明

終わりの時刻を取得

使い方

日時.end_of_minute

DateTime.new(2011, 12, 24, 00, 00, 00).end_of_minute

ago

説明

○秒前の時刻を取得

使い方

日時.ago(秒数)

今日の1秒前の時刻を取得
DateTime.new(2011, 12, 24, 00, 00, 00).ago(1)
# Sat, 23 Dec 2011 23:59:59 +0000

since

説明

○秒後の時刻を取得

使い方

日時.since(秒数)

今日の1秒後の時刻を取得
DateTime.new(2011, 12, 24, 00, 00, 00).since(1)
# Sat, 24 Dec 2011 00:00:01 +0000

seconds_since_midnight

説明

0時からの秒数を取得

使い方

日時.seconds_since_midnight

今日の0時からの秒数を取得
DateTime.new(2011, 12, 24, 10, 00, 00).seconds_since_midnight
# 36000

utc

説明

UTCの日時を取得

使い方

日時.seconds_since_midnight

UTCの日時を取得
DateTime.current.utc # Sat, 24 Dec 2011 00:00:00 +0900
# Fir, 23 Dec 2011 09:00:00 +1500

formatted_offset

説明

オフセットのフォーマット

使い方

日時.formatted_offset([コロンの有無])

datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24))
datetime.formatted_offset         # "-06:00"
datetime.formatted_offset(false)  # "-0600"

時間関連

layout: page

説明

時間関係の便利関数

tomorrow

説明

翌日の時間を取得

使い方

時間.tomorrow

翌日の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).tomorrow
#  2011-12-25 00:00:00 +0900

その他

標準関数で代替
Time.mktime(2011, 12, 24, 00, 00, 00) + 86400
#  2011-12-25 00:00:00 +0900

yesterday

説明

前日の時間を取得

使い方

時間.yesterday

翌日の時間を取得
Time.mktime(2011, 12, 24).yesterday
#  2011-12-23 00:00:00 +0900

その他

標準関数で代替
Time.mktime(2011, 12, 24) - 86400
#  2011-12-23 00:00:00 +0900

prev_year

説明

去年の時間を取得

使い方

時間.prev_year

去年の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).prev_year
#  2010-12-24 00:00:00 +0900

その他

標準関数で代替
Time.mktime(2011, 12, 24, 00, 00, 00) - 31536000
#  2010-12-24 00:00:00 +0900

next_year

説明

来年の時間を取得

使い方

時間.next_year

来年の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).next_year
#  2012-12-24 00:00:00 +0900

その他

標準関数で代替
Time.mktime(2011, 12, 24, 00, 00, 00) + 31536000
#  2012-12-24 00:00:00 +0900

prev_month

説明

先月の時間を取得

使い方

時間.prev_month

先月の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).prev_month
# 2011-11-24 00:00:00 +0900

next_month

説明

来月の時間を取得

使い方

時間.next_month

来月の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).next_month
# 2012-01-24 00:00:00 +0900

beginning_of_week

説明

今週の初めの時間を取得

使い方

時間.beginning_of_week

今週の終わりの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_week
# 2011-12-19 00:00:00 +0900

end_of_week

説明

今週の終わりの時間を取得

使い方

時間.end_of_week

今週の終わりの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_week
# 2011-12-25 23:59:59 +0900

next_week

説明

来週の時間を取得

使い方

時間.next_week

来週の初めの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).next_week
# 2011-12-26 00:00:00 +0900
来週の土曜日の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).next_week(:saturday)
# 2011-12-31 00:00:00 +0900

prev_week

説明

先週の時間を取得

使い方

時間.prev_week

先週の初めの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).prev_week
# 2011-12-12 00:00:00 +0900
先週の土曜日の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).prev_week
# Sat, 17 Dec 2011 00:00:00 +0000

beginning_of_month

説明

今月の初めの時間を取得

使い方

時間.beginning_of_month

今月の初めの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_month
# 2011-12-01 00:00:00 +0900

end_of_month

説明

今月の終わりの時間を取得

使い方

時間.end_of_month

今月の終わりの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_month
# 2011-12-31  23:59:59 +0900

beginning_of_quarter

説明

四半期の初めの時間を取得

使い方

時間.beginning_of_quarter

四半期の初めの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_quarter
# 2011-10-01 00:00:00 +0900

end_of_quarter

説明

四半期の終わりの時間を取得

使い方

時間.end_of_quarter

四半期の終わりの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_quarter
# 2011-12-31 23:59:59 +0900

beginning_of_year

説明

今年の初めの時間を取得

使い方

時間.beginning_of_year

今年の初めの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_year
# 2011-01-01 00:00:00 +0900

end_of_year

説明

今年の終わりの時間を取得

使い方

時間.end_of_year

今年の終わりの時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_year
# 2011-12-31 23:59:59 +0900

years_ago

説明

○年前の時間を取得

使い方

時間.years_ago(年数)

10年前の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).years_ago(10)
# 2001-12-24 00:00:00 +0900

years_since

説明

○年後の時間を取得

使い方

時間.years_since(年数)

10年後の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).years_since(10)
# 2021-12-24 00:00:00 +0900

months_ago

説明

○月前の時間を取得

使い方

時間.months_ago(月数)

2月前の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).months_ago(2)
# 2011-10-24 00:00:00 +0900

months_since

説明

○月後の時間を取得

使い方

時間.months_since(月数)

2月後の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).months_since(2)
# 2012-02-24 00:00:00 +0900

weeks_ago

説明

○週前の時間を取得

使い方

時間.weeks_ago(週数)

2週前の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).weeks_ago(2)
# Sat, 10 Dec 2011 00:00:00 +0000

advance

説明

特定の時間前の時間を取得

使い方

時間.advance(時間のハッシュ)

2ヶ月後の2日前の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).advance(months: 2, days: -2)
# 2012-02-22 00:00:00 +0900

change

説明

特定の時間前の時間を取得

使い方

時間.change(オプション)

オプション

オプション 説明
:year
:month
:day
:hour 時間
:min
:sec
:usec  
:nsec  
:offset  

2ヶ月後の2日前の時間を取得
Time.mktime(2011, 12, 24, 00, 00, 00).change(months: 2, days: -2)
# 2011-12-24 00:00:00 +0900

時間の計算

説明

時間を足したり、引いたりする

使い方

時間 (+ or -) 時間

2日後の時間を計算
Time.mktime(2011, 12, 24, 00, 00, 00) + 2.day
# 2011-12-26 00:00:00 +0900
1年前の時間を計算
Time.mktime(2011, 12, 24, 00, 00, 00) - 1.year
# 2011-12-24 00:00:00 +0900

beginning_of_day

説明

初めの日時を取得

使い方

時間.beginning_of_day

初めの時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_day

beginning_of_hour

説明

初めの時刻を取得

使い方

時間.beginning_of_hour

初めの時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_hour

beginning_of_minute

説明

初めの時刻を取得

使い方

時間.beginning_of_minute

初めの秒数を取得
Time.mktime(2011, 12, 24, 00, 00, 00).beginning_of_minute

end_of_day

説明

終わりの日を取得

使い方

時間.end_of_day

今日の1秒後の時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_day
# 2011-12-24 23:59:59 +0900

end_of_hour

説明

終わりの時刻を取得

使い方

時間.end_of_hour

今日の1秒後の時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_hour

end_of_minute

説明

終わりの秒数を取得

使い方

時間.end_of_minute

今日の1秒後の時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).end_of_minute

ago

説明

今日の○秒前の時刻を取得

使い方

時間.ago(秒数)

今日の1秒前の時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).ago(1)
# 2011-12-23 23:59:59 +0900

since

説明

今日の○秒後の時刻を取得

使い方

時間.since(秒数)

今日の1秒後の時刻を取得
Time.mktime(2011, 12, 24, 00, 00, 00).since(1)
# 2011-12-24 00:00:01 +0900

seconds_since_midnight

説明

今日の0時からの秒数を取得

使い方

時間.seconds_since_midnight

今日の0時からの秒数を取得
Time.mktime(2011, 12, 24, 10, 00, 00).seconds_since_midnight
# 36000.0

utc

説明

UTCの時間を取得

使い方

時間.seconds_since_midnight

UTCの時間を取得
Time.current.utc # 2011-12-24 00:00:00 +0900
# 2011-12-23 15:00:00 UTC

zone_default

説明

UTCの時間を取得

使い方

時間.zone_default

UTCの時間を取得
Time.zone_default
# (GMT+09:00) Tokyo

days_in_month

説明

月の日数を取得

使い方

Time.days_in_month(月 [, 年])

2020年2月の日数
Time.days_in_month(2, 2020)
# 29
今年の2月の日数
Time.days_in_month(2)
# 29

days_in_year

説明

年の日数を取得

使い方

Time.days_in_year(月 [, 年])

2020年の日数
Time.days_in_year(2, 2020)
# 365
今年の日数
Time.days_in_year(2)
# 365

find_zone

説明

指定したタイムゾーンを取得

使い方

Time.find_zone(タイムゾーン)

Time.find_zone "Tokyo"

rfc3339

説明

RFC3339文字列からTimeを生成

使い方

Time.rfc3339(文字列)

Time.rfc3339('1999-12-31T14:00:00-10:00')
# 2000-01-01 00:00:00 -1000

use_zone

説明

一時的にタイムゾーンを変更

使い方

Time.use_zone(文字列) {
    処理内容
}

Time.use_zone "Tokyo" {
    Time.local(2019, 01, 01, 00, 00, 00)
}

formatted_offset

説明

オフセットのフォーマット

使い方

Time.now.formatted_offset([コロンの有無])

Time.local(2000).formatted_offset
# "-06:00"

Time.local(2000).formatted_offset(false)
# "-0600"

middle_of_day

説明

日中(12:00)

使い方

Time.now.middle_of_day

Time.mktime(2011, 12, 24, 00, 00, 00).middle_of_day

next_day

説明

指定した日の次の日

使い方

Time.now.next_day

Time.mktime(2011, 12, 24, 00, 00, 00).next_day

next_month

説明

指定した日の次の月

使い方

Time.next_month

Time.mktime(2011, 12, 24, 00, 00, 00).next_month

next_year

説明

指定した日の次の年

使い方

Time.now.next_year

Time.mktime(2011, 12, 24, 00, 00, 00).next_year

prev_day

説明

指定した日の前の日

使い方

Time.prev_day

Time.mktime(2011, 12, 24, 00, 00, 00).prev_day

prev_month

説明

指定した日の前の月

使い方

Time.now.prev_month

Time.mktime(2011, 12, 24, 00, 00, 00).prev_month

prev_year

説明

指定した日の前の年

使い方

Time.prev_year

Time.mktime(2011, 12, 24, 00, 00, 00).prev_year

seconds_since_midnight

説明

00:00:00からの秒数

使い方

Time.now.seconds_since_midnight

Time.mktime(2011, 12, 24, 00, 00, 00).seconds_since_midnight

seconds_until_end_of_day

説明

23:59:59までの秒数

使い方

Time.now.seconds_until_end_of_day

Time.mktime(2011, 12, 24, 00, 00, 00).seconds_until_end_of_day

to_formatted_s

説明

指定したフォーマットに変換

使い方

Time.now.to_formatted_s(フォーマット)

Time.now.to_formatted_s(:time)
# "06:10"

Time.now.to_s(:time)
# "06:10"

Time.now.to_formatted_s(:db)
# "2007-01-18 06:10:17"

Time.now.to_formatted_s(:number)
# "20070118061017"

Time.now.to_formatted_s(:short)
# "18 Jan 06:10"

Time.now.to_formatted_s(:long)
# "January 18, 2007 06:10"

Time.now.to_formatted_s(:long_ordinal)
# "January 18th, 2007 06:10"

Time.now.to_formatted_s(:rfc822)
# "Thu, 18 Jan 2007 06:10:17 -0600"

Time.now.to_formatted_s(:iso8601)
# "2007-01-18T06:10:17-06:00"

単位を計算

layout: page

説明

バイト、キロバイトなどの単位を計算

使い方

バイト

数字.bytes

キロバイト

数字.kilobytes

メガバイト

数字.megabytes

ギガバイト

数字.gigabytes

テラバイト

数字.terabytes

ペタバイト

数字.petabytes

エクサバイト

数字.exabytes

2.kilobytes
# 2048

引数の文字列で指定した名前で定数を探す

layout: page

説明

指定した名前で定数を探す

使い方

constantize("文字列")

constantize('Module')
# Module

constantize('Test::Unit')
# Test::Unit

ソースコード

アンダーバーをハイフンに変換

layout: page

説明

アンダーバー(_)をハイフン(-)に変換

使い方

dasherize("文字列")
or
文字列.dasherize()

アンダーバーをハイフンに変換

dasherize('puni_puni')
# "puni-puni"

ソースコード

文字列から右端のセグメントを削除

layout: page

説明

文字列から右端のセグメントを削除

使い方

deconstantize("文字列")
or
文字列.deconstantize()

::HTMPを削除

deconstantize('Net::HTTP')
# "Net"

::HTMPを削除

deconstantize('::Net::HTTP')
# "::Net"

セグメントが1つ場合

deconstantize('String')
# ""

空文字の場合

deconstantize('')
# ""

ソースコード

文字列からモジュールの一部を削除

layout: page

説明

定数式からモジュール部分を削除

使い方

demodulize("文字列")
or
文字列.demodulize()

定数式からモジュール部分を削除

demodulize('ActiveRecord::CoreExtensions::String::Inflections')
# "Inflections"

モジュール部分が無い

demodulize('Inflections')
# "Inflections"

ソースコード

クラス名から外部キーの名前を作成

layout: page

説明

クラス名から外部キーの名前を生成
separate_class_name_and_id_with_underscoreがfalseでアンダーバーなし

使い方

foreign_key(文字列 [, 名前とidの間にアンダーバーを入れるか = true])
or
文字列.foreign_key([名前とidの間にアンダーバーを入れるか = true])

クラス名から外部キーの名前を生成

foreign_key('Message')
# "message_id"

名前とidの間にアンダーバーを入れない

foreign_key('Message', false)
# "messageid"

親クラスがある場合

foreign_key('Admin::Post')
# "post_id"

ソースコード

外部キー制約を追加

layout: page

説明

指定したテーブルに外部キー制約を追加

使い方

add_foreign_key(テーブル名, 参照先テーブル名 [, オプション])

オプション

オプション 説明
:column 外部キーカラム名
:primary_key 参照先テーブルの主キー
:name 制約
:on_delete 削除時のアクション
:on_update 更新時のアクション
:validate バリデート

外部キー制約を追加

add_foreign_key :articles, :authors
# ALTER TABLE "articles" ADD CONSTRAINT fk_rails_e74ce85cbc FOREIGN KEY ("author_id") REFERENCES "authors" ("id")

主キーを指定

add_foreign_key :articles, :users, column: :author_id, primary_key: "lng_id"
# ALTER TABLE "articles" ADD CONSTRAINT fk_rails_58ca3d3a82 FOREIGN KEY ("author_id") REFERENCES "users" ("lng_id")

削除時のアクションを指定

add_foreign_key :articles, :authors, on_delete: :cascade
# ALTER TABLE "articles" ADD CONSTRAINT fk_rails_e74ce85cbc FOREIGN KEY ("author_id") REFERENCES "authors" ("id") ON DELETE CASCADE

ソースコード

最初の単語を大文字にしてアンダーバーをスペースへ変換し末尾の_idを削除

layout: page

説明

最初の単語を大文字にし、アンダーバーをスペースへ変換し、末尾の_idを削除

使い方

humanize(文字列 [, オプション])

オプション

オプション 説明 デフォルト値
:capitalize 最初の単語を大文字にするか true
:keep_id_suffix 末尾の_idを残すか false

最初の単語を大文字にし、アンダーバーをスペースへ変換

humanize('employee_salary')
# "Employee salary"

最初の単語を大文字にし、末尾の_idを削除

humanize('author_id')
# "Author"

最初の単語を大文字しない

humanize('author_id', capitalize: false)
# "author"

_idのみ

humanize('_id')
# "Id"

末尾の_idを残す

humanize('author_id', keep_id_suffix: true)
# "Author Id"

ソースコード

数値を通貨のフォーマットに変換

layout: page

説明

数値を通貨のフォーマットに変換

使い方

number_to_currency(数値 [, オプション])

オプション

オプション 説明 デフォルト値
:locale 使用するロケール。YAML形式で「/config/locales/」以下の設定  
:precision 小数以下の桁数 2
:unit 通貨単位 $
:separator 小数点記号 .
:delimiter 桁区切り文字 ,
:format 出力される文字のフォーマット %u%n
:negative_format マイナスのときのフォーマット -%u%n
:raise 引数が無効な場合に、InvalidNumberError false
:strip_insignificant_zeros 少数以下は無視 false

ドルの通過フォーマットに変換

number_to_currency(123456789)
# $123,456,789.00

小数点5つまで表示

number_to_currency(123456789, precision: 5)
# $123,456,789.00000

小数点をスペースで区切る

number_to_currency(123456789, separator: " ")
# $123,456,789 00

桁区切りをスペース

number_to_currency(123456789, delimiter: " ")
# $123 456 789.00

通過単位を「¥」

number_to_currency(123456789, unit: "¥")
# ¥123,456,789.00

通過単位を後ろ

number_to_currency(123456789, format: "%u%n", unit: "¥")
# 123,456,789.00円

マイナスのフォーマット

number_to_currency(-123456789, negative_format: "%u-%n")
# $-123,456,789.00

円のロケールを設定

# config/locales/jp/yml
jp:
  number:
    currency:
      format:
        unit: "円"
        format: "%n%u"
        negative_format: "-%n%u"
        precision: 0

number_to_currency(123456789, locale: 'jp')
# 123,456,789円

ソースコード

数値を単位のフォーマットに変換

layout: page

説明

数値を単位のフォーマットに変換

使い方

number_to_human(数値 [, オプション])

オプション

オプション 説明 デフォルト
:locale 使用するロケール  
:precision 桁数 1
:signigicant 全体桁数  
:separator 小数点記号 .
:delimiter 桁区切り文字 ,
:strip_insignidicant_zeros 小数点以下の0を削除  
:units 単位名を表すハッシュ。整数: :unit, :ten, :hundred, :thousand, :million, :billion, :trillion, :quadrillion。小数: :deci, :centi, :mili, :micro, :nano, :pico, :femto  
:format 出力形式  
:raise エラーの場合に例外  

単位で表示

number_to_human(123456789)
# 123 Million

5桁で表示

number_to_human(123456789, precision: 5)
# 123.00 Million

小数点をスペースで区切る

number_to_human(123456789, precision: 5, separator: " ")
# 123 00 Million

単位を日本語仕様

number_to_human(123456789, units: {hundred: "百", thousand: "千", million: "百万", billion: "十億", trillion: "兆", quadrillion: "千兆"})
# 123 百万

ソースコード

バイト単位の数値を変換

layout: page

説明

バイト単位の数値を変換

使い方

number_to_human_size(数値 [, オプション])

オプション

オプション 説明 デフォルト値
:locale 使用するロケール locale
:precision 小数以下の桁数 3
:signigicant 全体桁数 true
:separator 小数点記号 .
:delimiter 桁区切り文字  
:strip_insignidicant_zeros 小数点以下の0を削除 true
:raise エラーの場合に例外  

バイト単位に変換

number_to_human_size 123456789
# 118 MB

小数以下の桁数を指定

number_to_human_size 524288000, precision: 5
# 500 MB

ソースコード

数値をパーセントに変換

layout: page

説明

数値をパーセントに変換

使い方

number_to_percentage(数値 [, オプション])

オプション

オプション 説明 デフォルト
:locale 使用するロケール current locale
:precision 小数以下の桁数 3
:signigicant 全体桁数 false
:separator 小数点記号 .
:delimiter 桁区切り文字  
:strip_insignidicant_zeros 小数点以下の0を削除 false
:format 出力される文字のフォーマット %u%n(%uは通貨の単位 %nは数字部分)
:raise エラーの場合に例外  

パーセント表示

number_to_percentage(100)
# 100.000%

ソースコード

桁区切り文字を追加

layout: page

説明

桁区切り文字を追加

使い方

number_with_delimiter(数値 [, オプション])

オプション

オプション 説明
:locale 使用するロケール
:delimiter 桁区切り文字
:separator 小数点記号
:delimiter_pattern フォーマット
:raise 引数が無効な場合に、InvalidNumberError

桁区切り文字追加

number_with_delimiter 123456789
# 123,456,789

区切り文字を変更

number_with_delimiter(12345678, delimiter: ".")
# => 12.345.678

文字が含まれる場合

number_with_delimiter("112a")
# => 112a

ソースコード

数値を特定の桁で丸める

layout: page

説明

数値を丸める

使い方

number_with_precision(数値 [, オプション])

オプション

オプション 説明 デフォルト値
:locale 使用するロケール  
:precision 小数以下の桁数 3
:signigicant 全体桁数 false
:separator 小数点記号 .
:delimiter 桁区切り文字 ,
:strip_insignidicant_zeros 小数点以下の0を削除 false
:raise 引数が無効な場合に、InvalidNumberError  

数値を特定の桁で丸める

number_with_precision(12345678)
# 12,345,678

数字

number_with_precision("123456")
# 123,456

小数点

number_with_precision(12345678.05)
# 12,345,678.05

区切り文字を変更

number_with_precision(12345678, delimiter: ".")
# 12.345.678

小数点の区切り文字を変更

number_with_precision(12345678.05, separator: " ")
# 12,345,678 05

ロケール変更

number_with_precision(12345678.05, locale: :fr)
# 12 345 678,05

文字が含まれる場合

number_with_precision("112a")
# 112a

正規表現

number_with_precision("123456.78", delimiter_pattern: /(\d+?)(?=(\d\d)+(\d)(?!\d))/)
# 1,23,456.78

ソースコード

USの電話番号フォーマット

layout: page

説明

USの電話番号フォーマット

使い方

number_to_phone(数値 [, オプション])

オプション

オプション 説明 デフォルト値
:area_code エリアコード  
:delimiter 桁区切り文字 -
:extension 末尾に追加する拡張子  
:country_code カントリーコード  
:pattern フォーマット  
:raise エラーの場合に例外  

number_to_phone(123456789)
# 123456789.000

ソースコード

数字を区切り文字を使用してグループ化

layout: page

説明

数字を区切り文字を使用してグループ化

使い方

number_to_delimited(数値 [, オプション])

オプション

オプション 説明
:locale 使用するロケール
:delimiter 桁区切り文字
:separator 少数と整数の区切り文字を設定
:delimiter_pattern 正規表現

数字を区切り文字を使用してグループ化

number_to_delimited(12345678)
# 12,345,678

数字を指定

number_to_delimited('123456')
# 123,456

少数あり

number_to_delimited(12345678.05)
# 12,345,678.05

区切り文字を変更

number_to_delimited(12345678, delimiter: '.')
# 12.345.678

小数点の区切り文字を変更

number_to_delimited(12345678.05, separator: ' ')
# 12,345,678 05

ロケール変更

number_to_delimited(12345678.05, locale: :fr)
# 12 345 678,05

文字が含まれる場合

number_to_delimited('112a')
# 112a

ソースコード

フォーマットの指定されたレベル

layout: page

説明

数値を丸める

使い方

number_to_rounded(数値 [, オプション])

オプション

オプション 説明 デフォルト値
:locale 使用するロケール。YAML形式で「/config/locales/」以下の設定  
:precision 桁数 3
:significant 少数も桁数に含める false
:separator 小数点記号 .
:delimiter 桁区切り文字 ,
:strip_insignificant_zeros 小数点以下の余分な0を削除 false

数値を丸める

number_to_rounded(111.2345)
# 111.235

小数点以下2桁で丸める

number_to_rounded(111.2345, precision: 2)
# 111.23

少数以下5桁

number_to_rounded(13, precision: 5)
# 13.00000

整数のみ

number_to_rounded(389.32314, precision: 0)
# 389

3桁で丸める

number_to_rounded(111.2345, significant: true)
# 111

1つめ桁で丸める

number_to_rounded(111.2345, precision: 1, significant: true)
# 100

ロケール指定

number_to_rounded(111.234, locale: :fr)
# 111,234

区切り文字を変更

number_to_rounded(1111.2345, precision: 2, separator: ',', delimiter: '.')
# 1.111,23

ソースコード

XML変換

layout: page

説明

配列またはハッシュをXML形式に変換

使い方

配列.to_xml([オプション])

ハッシュ.to_xml([オプション])

オプション

オプション 説明
:root ルート要素を指定
:children 子要素を指定
:skip_types  
:indent インデントを指定
:builder XMLビルダを指定
:skip_instruct ヘッダのタグを非表示

配列をXML形式

[{ foo: 1, bar: 2}, { baz: 3}].to_xml
# <?xml version="1.0" encoding="UTF-8"?>
# <objects type="array">
#   <object>
#     <bar type="integer">2</bar>
#     <foo type="integer">1</foo>
#   </object>
#   <object>
#     <baz type="integer">3</baz>
#   </object>
# </objects>

ハッシュをXML形式

{ foo: 1, bar: 2 }.to_xml
# =>
# <?xml version="1.0" encoding="UTF-8"?>
# <hash>
#   <foo type="integer">1</foo>
#   <bar type="integer">2</bar>
# </hash>

配列関係の便利関数

layout: page

説明

配列関係の便利関数

deep_dup

説明

配列のディープコピー

使い方

配列.deep_dup

array = [1, [2, 3]]
dup   = array.deep_dup
dup[1][2] = 4
array[1][2] # nil
dup[1][2]   # 4

excluding

説明

指定された要素を除外した配列

使い方

配列.excluding(要素)

文字列の配列から特定の文字列を除外
["David", "Rafael", "Aaron", "Todd"].excluding("Aaron", "Todd")
# ["David", "Rafael"]
配列の配列から特定の配列を除外
[ [ 0, 1 ], [ 1, 0 ] ].excluding([ [ 1, 0 ] ])
# [ [ 0, 1 ] ]

excluding!

説明

指定された要素を除外した配列 excludingの破壊的メソッド版

使い方

配列.excluding!(要素)

文字列の配列から特定の文字列を除外
["David", "Rafael", "Aaron", "Todd"].excluding!("Aaron", "Todd")
# ["David", "Rafael"]
配列の配列から特定の配列を除外
[ [ 0, 1 ], [ 1, 0 ] ].excluding!([ [ 1, 0 ] ])
# [ [ 0, 1 ] ]

from

説明

配列の末尾から指定された位置までの配列

使い方

配列.from(位置)

全配列
%w( a b c d ).from(0)
# ["a", "b", "c", "d"]
最後の2個の配列
%w( a b c d ).from(2)
# ["c", "d"]
配列数より大きな数を指定
%w( a b c d ).from(10)
# []
空の配列
%w().from(0)
# []

in_groups

説明

指定した数の配列にグルーピング

使い方

配列.in_groups(数, 埋める文字列)

グルーピング
%w(1 2 3 4 5 6 7 8 9 10).in_groups(3) {|group| p group}
# ["1", "2", "3", "4"]
# ["5", "6", "7", nil]
# ["8", "9", "10", nil]
埋める文字列を指定
%w(1 2 3 4 5 6 7 8 9 10).in_groups(3, '&nbsp;') {|group| p group}
# ["1", "2", "3", "4"]
# ["5", "6", "7", "&nbsp;"]
# ["8", "9", "10", "&nbsp;"]

in_groups_of

説明

指定した長さの配列にグルーピング

使い方

配列.in_groups_of(数, 埋める文字列)

グルーピング
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3) {|group| p group}
# ["1", "2", "3"]
# ["4", "5", "6"]
# ["7", "8", "9"]
# ["10", nil, nil]
埋める文字列を指定
%w(1 2 3 4 5).in_groups_of(2, '&nbsp;') {|group| p group}
# ["1", "2"]
# ["3", "4"]
# ["5", "&nbsp;"]

including

説明

配列に要素を追加

使い方

配列.including(要素)

配列に要素を追加
[ 1, 2, 3 ].including(4, 5)
# [ 1, 2, 3, 4, 5 ]
配列の配列を追加
[ [ 0, 1 ] ].including([ [ 1, 0 ] ])
# [ [ 0, 1 ], [ 1, 0 ] ]

inquiry

説明

配列をオブジェクトに変換

使い方

配列.inquiry

pets = [:cat, :dog].inquiry
pets.cat?     # true
pets.ferret?  # false

split

説明

配列を分割

使い方

配列.split(値)

配列を分割
[1, 2, 3, 4, 5].split(3)
# [[1, 2], [4, 5]]
配列の条件を指定して分割
(1..10).to_a.split { |i| i % 3 == 0 }
# [[1, 2], [4, 5], [7, 8], [10]]

to

説明

初めから位置までの配列

使い方

配列.to(位置)

配列の先頭を取得
%w( a b c d ).to(0)
# ["a"]
配列の先頭から3個取得
%w( a b c d ).to(2)
# ["a", "b", "c"]
配列より大きな数を指定
%w( a b c d ).to(10)
# ["a", "b", "c", "d"]
空の配列
%w().to(0)
# []

to_query

説明

キーからURLで使える文字列

使い方

配列.to_query(キー名)

['Rails', 'coding'].to_query('hobbies')
# "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"

to_sentence

説明

英文として適した文字列

使い方

配列.to_sentence([オプション])

オプション

オプション 説明 デフォルト値
:words_connector 3つ以上の場合の最後以外の結合文字 ,
:two_words_connector 結合文字 ” and”
:last_word_connector 3つ以上の場合は最後の結合文字 “, and”
:locale ロケール  

空の配列
[].to_sentence
# ""
配列の要素が1
['one'].to_sentence
# "one"
配列の要素が2
['one', 'two'].to_sentence
# "one and two"
配列の要素が3
['one', 'two', 'three'].to_sentence
# "one, two, and three"

to_xml

説明

XML変換

使い方

配列.to_xml([オプション])

[{ foo: 1, bar: 2}, { baz: 3}].to_xml
# <?xml version="1.0" encoding="UTF-8"?>
# <objects type="array">
#   <object>
#     <bar type="integer">2</bar>
#     <foo type="integer">1</foo>
#   </object>
#   <object>
#     <baz type="integer">3</baz>
#   </object>
# </objects>

sum

説明

合計値を計算

使い方

配列.sum

1から10までの合計値
[1,2,3,4,5,6,7,8,9,10].sum

sum(Ruby)

説明

条件を満たす値の合計値を計算

使い方

配列.sum{|n| 条件}

1から10まで偶数の合計値
[1,2,3,4,5,6,7,8,9,10].sum{|num| num %2 == 0}

複製可能かチェック

layout: page

説明

複製可能か?

使い方

duplicable?

複製可能

"hoge".duplicable?
# true

空文字の場合

"".duplicable?
# true

複製不可能

method(:puts).unbind.duplicable?
# false

ソースコード

ハッシュ関係の便利関数

layout: page

説明

ハッシュ関係の便利関数

from_trusted_xml

説明

XMLからハッシュを生成

使い方

Hash.from_trusted_xml(xml)

Hash.from_trusted_xml(xml)
# {"hash"=>{"foo"=>1, "bar"=>2}}

from_xml

説明

XMLからハッシュを生成

使い方

Hash.from_xml(xml)

Hash.from_xml(xml)
# {"hash"=>{"foo"=>1, "bar"=>2}}

assert_valid_keys

説明

指定したキーがあるかバリデーション

使い方

ハッシュ.assert_valid_keys(キー名, ...)

{ name: 'Rob', years: '28' }.assert_valid_keys(:name, :age)
# raises "ArgumentError: Unknown key: :years. Valid keys are: :name, :age"

{ name: 'Rob', age: '28' }.assert_valid_keys('name', 'age')
# raises "ArgumentError: Unknown key: :name. Valid keys are: 'name', 'age'"

{ name: 'Rob', age: '28' }.assert_valid_keys(:name, :age)
# passes, raises nothing

deep_dup

説明

ハッシュのディープコピー

使い方

ハッシュ.deep_dup

hash = { a: { b: 'b' } }
dup  = hash.deep_dup
dup[:a][:c] = 'c'
hash[:a][:c] # nil
dup[:a][:c]  # "c"

deep_merge

説明

ハッシュのディープコピー

使い方

ハッシュ.deep_merge(ハッシュ)

h1 = { a: true, b: { c: [1, 2, 3] } }
h2 = { a: false, b: { x: [3, 4, 5] } }
h1.deep_merge(h2)
# { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }

deep_merge!

説明

ハッシュのディープコピー
破壊的メソッド

使い方

ハッシュ.deep_merge!(ハッシュ)

h1 = { a: true, b: { c: [1, 2, 3] } }
h2 = { a: false, b: { x: [3, 4, 5] } }
h1.deep_merge!(h2)
# { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }

deep_stringify_keys

説明

全てのキーを文字列にしたハッシュに変換

使い方

ハッシュ.deep_stringify_keys

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_stringify_keys
# {"person"=>{"name"=>"Rob", "age"=>"28"}}

deep_stringify_keys!

説明

全てのキーを文字列にしたハッシュに変換
破壊的メソッド

使い方

ハッシュ.deep_stringify_keys!

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_stringify_keys!
# {"person"=>{"name"=>"Rob", "age"=>"28"}}

deep_symbolize_keys

説明

全てのキーをシンボルにしたハッシュに変換

使い方

ハッシュ.deep_symbolize_keys

hash = {person: {name: 'Rob', age: '28'}}
hash.deep_symbolize_keys
# {:person=>{:name=>"Rob", :age=>"28"}}

deep_symbolize_keys!

説明

全てのキーをシンボルにしたハッシュに変換
破壊的メソッド

使い方

ハッシュ.deep_symbolize_keys!

hash = {person: {name: 'Rob', age: '28'}}
hash.deep_symbolize_keys!
# {:person=>{:name=>"Rob", :age=>"28"}}

deep_transform_keys

説明

ブロック内で変換されたキーを含むハッシュに変換

使い方

ハッシュ.deep_transform_keys{|key| 処理 }

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_transform_keys{ |key| key.to_s.upcase }
# {"PERSON"=>{"NAME"=>"Rob", "AGE"=>"28"}}

deep_transform_keys!

説明

ブロック内で変換されたキーを含むハッシュに変換
破壊的メソッド

使い方

ハッシュ.deep_transform_keys!{|key| 処理 }

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_transform_keys!{ |key| key.to_s.upcase }
# {"PERSON"=>{"NAME"=>"Rob", "AGE"=>"28"}}

deep_transform_values

説明

ブロック内で変換された値を含むハッシュに変換

使い方

ハッシュ.deep_transform_values{|key| 処理 }

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_transform_values{ |value| value.to_s.upcase }
# {person: {name: "ROB", age: "28"}}

deep_transform_values!

説明

ブロック内で変換された値を含むハッシュに変換
破壊的メソッド

使い方

ハッシュ.deep_transform_values!{|key| 処理 }

hash = { person: { name: 'Rob', age: '28' } }
hash.deep_transform_values!{ |value| value.to_s.upcase }
# {person: {name: "ROB", age: "28"}}

except

説明

指定されたキーを除外したハッシュに変換

使い方

ハッシュ.except(キー名, ...)

{ a: true, b: false, c: nil }.except(:c)
# { a: true, b: false }

{ a: true, b: false, c: nil }.except(:a, :b)
# { c: nil }

except!

説明

指定されたキーを除外したハッシュに変換
破壊的メソッド

使い方

ハッシュ.except!(キー名, ...)

{ a: true, b: false, c: nil }.except!(:c)
# { a: true, b: false }

{ a: true, b: false, c: nil }.except!(:a, :b)
# { c: nil }

reverse_merge

説明

逆順でマージ

使い方

ハッシュ.reverse_merge(ハッシュ)

options.reverse_merge(size: 25, velocity: 10)

reverse_merge!

説明

逆順でマージ
破壊的メソッド

使い方

ハッシュ.reverse_merge!(ハッシュ)

options.reverse_merge!(size: 25, velocity: 10)

slice!

説明

指定されたキーのみのハッシュに変換。戻り値として、削除されたハッシュを返す
破壊的メソッド

使い方

ハッシュ.slice!(キー名)

hash = { a: 1, b: 2, c: 3, d: 4 }
hash.slice!(:a, :b)  # {:c=>3, :d=>4}
hash                 # {:a=>1, :b=>2}

stringify_keys

説明

全てのキーを文字列にしたハッシュに変換

使い方

ハッシュ.stringify_keys

hash = { name: 'Rob', age: '28' }
hash.stringify_keys
# {"name"=>"Rob", "age"=>"28"}

stringify_keys!

説明

全てのキーを文字列にしたハッシュに変換
破壊的メソッド

使い方

ハッシュ.stringify_keys!

hash = { name: 'Rob', age: '28' }
hash.stringify_keys!
# {"name"=>"Rob", "age"=>"28"}

symbolize_keys

説明

全てのキーをシンボルにしたハッシュに変換

使い方

ハッシュ.symbolize_keys

hash = {name: 'Rob', age: '28'}
hash.symbolize_keys
# {:name=>"Rob", :age=>"28"}

symbolize_keys!

説明

全てのキーをシンボルにしたハッシュに変換
破壊的メソッド

使い方

ハッシュ.symbolize_keys!

hash = {name: 'Rob', age: '28'}
hash.symbolize_keys!
# {:name=>"Rob", :age=>"28"}

to_query

説明

URLとして使える文字列に変換

使い方

ハッシュ.to_query([名前空間名]))

{name: 'David', nationality: 'Danish'}.to_query
# "name=David&nationality=Danish"

{name: 'David', nationality: 'Danish'}.to_query('user')
# "user%5Bname%5D=David&user%5Bnationality%5D=Danish"

to_xml

説明

XMLに変換

使い方

ハッシュ.to_xml([オプション]))

{ foo: 1, bar: 2 }.to_xml
# <?xml version="1.0" encoding="UTF-8"?>
# <hash>
#   <foo type="integer">1</foo>
#   <bar type="integer">2</bar>
# </hash>

HTMLタグをエスケープ

layout: page

説明

HTMLタグをエスケープ

使い方

html_escape(文字列)

HTMLタグをエスケープ

html_escape('is a > 0 & a < 10?')
# is a &gt; 0 &amp; a &lt; 10?

ソースコード

既にエスケープされた文字列はそのままで、HTMLタグをエスケープ

layout: page

説明

既にエスケープされた文字列はそのままで、HTMLタグをエスケープ

使い方

html_escape_once(文字列)

HTMLタグをエスケープ

html_escape_once('&lt;&lt; Accept & Checkout')
# "&lt;&lt; Accept &amp; Checkout"

ソースコード

数値関係の便利関数

layout: page

説明

数値関係の便利関数

months

説明

月の形式に変換

使い方

数字.months

2.months
# 2 months

multiple_of?

説明

割り切れるか?

使い方

数字.multiple_of?(数字)

0.multiple_of?(0)
# true

6.multiple_of?(5)
# false

10.multiple_of?(2)
# true

ordinal

説明

順番のサフィックス

使い方

数字.ordinal

1.ordinal
# "st"

2.ordinal
# "nd"

1002.ordinal
# "nd"

1003.ordinal
# "rd"

-11.ordinal
# "th"

-1001.ordinal
# "st"

ordinalize

説明

数字を順序文字列に変換

使い方

数字.ordinalize

1.ordinalize
# "1st"

2.ordinalize
# "2nd"

1002.ordinalize
# "1002nd"

1003.ordinalize
# "1003rd"

-11.ordinalize
# "-11th"

-1001.ordinalize
# "-1001st"

years

説明

年の形式に変換

使い方

数字.years

2.years
# 2 years

JSONエスケープ

layout: page

説明

JSONエスケープ

使い方

json_escape(文字列)

JSONエスケープ

json_escape(json)
# "{\"name\":\"\\u003C/script\\u003E\\u003Cscript\\u003Ealert('PWNED!!!')\\u003C/script\\u003E\"}"

ソースコード

例外処理をまとめる

layout: page

説明

例外処理をまとめる

使い方

rescue_from(例外 , with: メソッド)

例外処理をまとめる

rescue_from User::NotAuthorized, with: :deny_access

ソースコード

Digest::MD5を使ったUUID

layout: page

説明

Digest::MD5を使ったUUID

使い方

Digest::UUID.uuid_v3(UUIDの名前空間, 名前)

Digest::MD5を使ったUUID

Digest::UUID.uuid_v3("name_space", "sample")
# "3b0ead59-ca8d-350b-a392-e656db58b0fc"

ソースコード

UUID

layout: page

説明

UUID

使い方

Digest::UUID.uuid_v4

UUID

Digest::UUID.uuid_v4
# "4ad2a6a9-0135-4158-94d3-a33e41bbe048"

ソースコード

Digest::SHA1を使ったUUID

layout: page

説明

Digest::SHA1を使ったUUID

使い方

Digest::UUID.uuid_v5(UUIDの名前空間, 名前)

Digest::SHA1を使ったUUID

Digest::UUID.uuid_v5("name_space", "sample")
# "d7a9ae1a-b099-5318-8828-340cc10a1550"

ソースコード

ぼっち演算

layout: page

try

説明

オブジェクトがnilの時やメソッドが定義されていない場合はnilを返す
メソッドが定義されている場合はそのメソットを呼び出す

使い方

オブジェクト.try(メソッド)

メソッドが定義されていない場合やオブジェクトがnilの時にnilを返す
@person.try(:name)
# @person.name if @personと同じ
tryを重ねる
@person.try(:spouse).try(:name)
nilの場合
@person.try(:non_existing_method)x
# nil

ソースコード

try!

説明

オブジェクトがnilの時にnilを返し、メソッドが定義されている場合はそのメソットを呼び出す
メソッドが定義されていない場合は例外が発生
Rubyのぼっち演算子と同じ処理で、ぼっち演算子の方が高速なので、ぼっち演算子がおすすめ

使い方

オブジェクト.try(メソッド)

メソッドが定義されている場合はそのメソットを呼び出す
@person.try!(:name)
tryを重ねる
@person.try!(:spouse).try(:name)!
nilの場合
@person.try!(:non_existing_method)x
# nil

ソースコード

&.

説明

オブジェクトがnilの時にnilを返し、メソッドが定義されている場合はそのメソットを呼び出す
メソッドが定義されていない場合は例外が発生
基本的にはtry!と同じ
Ruby2.3以降に追加されたRubyのメソッド

使い方

nil.try(:name) # => nil

メソッドが定義されている場合はそのメソットを呼び出す
@person&.name