Ruby、Railsで使われる主要なメソッド

久しぶりにブログを更新しました。今日はRubyRailsでよく使われるメソッドについてまとめてみました。いずれもユーザーが定義しなくてもすでに準備されているメソッドです。
Railsでは、Ruby単体では利用ができない特殊なメソッド(present?など)があるので注意してください。

Rubyで使われるメソッド

●putsメソッド

出力します。

message = "hello world!!"
puts message
=> hello world!!

●newメソッド

インスタンスを生成します。Railsインスタンスを生成するときに使われます。

user = User.new(name: "Michael Hartl", email: "mhartl@example.com")
=> # User:0x225167c @email="mhartl@example.com", @name="Michael Hartl"

●eachメソッド

配列やハッシュの中から、1個づつ値を取り出します。配列の要素数だけブロックを繰り返し、実行します。配列の要素を順番に処理するには、eachメソッドが妥当でしょう。ただし、要素の値を改変したいならば、eachよりもmapの方がいいです。


array = ["apple", "orange", "grape"]
array.each do |item|
print item + ", "
end
=> apple, orange, grape

●sortメソッド

配列やハッシュの中身を昇順に並び替えます。配列の中に数字やアルファベット、ひらがななどがランダムに入っていても、このメソッドで「1,2,3....」「A,B,C...」「あ,い,う...」のように並び替えてくれます。

x = ["う", "い", "あ", "お", "え"]
x.sort
=> ["あ", "い", "う", "え", "お"]

y = ["d", "a", "e", "c", "b"]
y.sort
=>["a", "b", "c", "d", "e"]

z = [3,5,1,25,8]
z.sort
=> [1, 3, 5, 8, 25]

#reverseメソッドで降順も可能
z.sort.reverse
=> [25, 8, 5, 3, 1]

●sliceメソッド

配列や文字列から指定の要素を切り出します。

x = ["Ruby", "PHP", "Python"]
x.slice(0)
=> "Ruby"

# 指定位置から指定数の要素をまとめて取得します。
x.slice(0, 2)
=> ["Ruby", "PHP"]

●splitメソッド

指定した区切り文字で、対象の文字列を分割し、配列にして返します。

x = "ruby, php, python"
x.split(',')
=> ["ruby", "php", "python"]

# 引数で区切り文字を指定しなければ、一文字ずつ配列にして返します。
y = "ruby"
y.split('')
=> ["r", "u", "b", "y"]

●unshiftメソッド

配列の先頭に要素を挿入します。

x = ["ruby", "php", "python"]
x.unshift("java")
=> ["java", "ruby", "php", "python"]

●pushメソッド

配列の末尾に要素を追加します。

x = ["ruby", "php", "python"]
x.push("java")
=>["ruby", "php", "python", "java"]

●shiftメソッド

配列の先頭の要素を削除します。

x = ["ruby", "php", "python"]
x.shift
=> ["php", "python"]

●popメソッド

配列の末尾の要素を削除します。

x = ["ruby", "php", "python"]
x.pop
=> ["ruby", "php"]

●joinメソッド

配列を結合して、一つの文字列にして返します。

#結合
x = ["ruby", "php", "java"]
x.join
=> "rubyphpjava"

#引数で区切る
x = ["ruby", "php", "java"]
x.join(",")
=> "ruby,php,java"

#平坦化
x = [["ruby","php"],["python","java"]]
x.join(" ")
=> "ruby php python java"

●uniqメソッド

配列内の要素の重複をなくします。

x = ["ruby","php",nil,"java",nil,"ruby","java"]
x.uniq
=> ["ruby", "php", nil, "java"]

●empty?メソッド

配列が空かどうかを判定します。

x = ["ruby","php","java"]
x.empty?
=> false

y = []
y.empty?
=> true

●lengthメソッド, sizeメソッド

配列や文字列の長さを返します。

x = ["ruby","php","java"]
x.length または x.size
=> 3

y = "python"
y.length または y.size
=> 6

●include?メソッド

指定した引数が配列に含まれているとtrueを返します。

x = ["ruby","php","java"]
x.include?("java")
=> true

x.include?("python")
=> false





Railsで使われるメソッド(Active Recordつまり主にモデルで使うメソッド)

●findメソッド

idカラム(主キー)の値を指定すると、その値を持つレコード(モデルオブジェクト)を1件取り出せます。該当するデータがなければ、例外を出します。

# 主キー(id)が10のユーザーを検索
user = User.find(10)
=> #User id: 10, name: "murata"


# 主キー(id)が1および10のユーザーを検索 。結果は配列として返る。
user = User.find([1, 10])
# => [
User id: 1, name: "abe",
User id: 10, name: "murata"
]

# 主キー(id)が123のユーザーはないので、例外ActiveRecord::RecordNotFoundが発生。
user = User.find(123)
=> #ActiveRecord::RecordNotFound: Couldn't find Member with 'id' =123


●find_byメソッド

カラムを指定して検索、最初に一致したもの、つまり1件だけ返します。また、findと違い該当するデータがない時はnilを返します。

# nameが「Taro」であるユーザーを検索。
user = User.find_by(name: "Taro")
=> User id: 5, name: "Taro", sex: "man", administrator: false

# sex(性別)が「man(男)」でかつadministrator(管理者)であるユーザーを検索。
user = User.find_by(sex: "man", administrator: true)
=> User id: 1, name: "Nakata", sex: "man", administrator: true

# 該当するデータがないときは「nil」が返る。
user = User.find_by(sex: "woman", administrator: true)
=> nil


●whereメソッド

検索条件に一致する複数のレコードを配列として取り出します。

# nameが「Taro」であるユーザーを検索。
user = User.where(name: "Taro")
=> User id: 5, name: "Taro", sex: "man", administrator: false

# idが9以上のレコードが全て取得できる。「?」に第二引数「9」が入る。
user = User.where("id > ?", 9)
=>[
User id: 10, name: "Asano", sex: "man", administrator: false
User id: 11, name: "Naitou", sex: "man", administrator: false
User id: 12, name: "Oguro", sex: "man", administrator: false
.....(省略)
]

# 「name」に文字列「sa」を含むレコードが全て取得できる。
user = User.where("name LIKE?", "%sa%")
=>[
User id: 10, name: "Asano", sex: "man", administrator: false
User id: 15, name: "Sasaki", sex: "man", administrator: false
User id: 19, name: "Sasai", sex: "man", administrator: false
.....(省略)
]

●firstメソッド

配列の先頭の要素を返します。要素がなければ nil を返します。

x = [0, 1, 2]
x.first
=> 0

y = []
=>nil

●lastメソッド

配列の最後の要素を返します。要素がなければ nil を返します。

x = [0, 1, 2]
x.last
=> 2

y = []
y.last
=>nil

●saveメソッド

レコードの保存に成功すると、trueを返します。失敗すると、falseを返します。
saveを実行して初めてデータベースにレコードがコミットされます。

user.name = 'Dave'
user.save
=> true(失敗すればfalse)

●save!メソッド

レコードの保存に成功すると、trueを返します。失敗すると、ActiveRecord::RecordInvalid例外を起こします。Railsではメソッドに「!」をつけることにより、例外を発生させることができます。

user = User.find_by(name: 'David')
user.name = ''
user.save
=> ActiveRecord::RecordInvalid: Validation failed:

●createメソッド

レコードの作成と保存を行います。作成と保存が成功しても失敗しても、モデルオブジェクトを返します。

User.create(name: "testuser")
=> # User id: 1, name: "testuser", created_at: "2019-11-03 14:22:46", updated_at: "2019-11-03 14:22:46"

●create!メソッド

レコードの作成と保存を行います。作成と保存が成功すればモデルオブジェクトを返し、失敗すれば例外を返します。

User.create(name: "")
=> 例外ActiveRecord::RecordInvalidが発生

●allメソッド

配列の全ての要素を取り出します。データベースのすべてのオブジェクトを返します。

@users = User.all
=>
[
User id: 1, name: "Michael Hartl", email: "mhartl@example.com"
User id: 2, name: "A Nother", email: "another@example.org"
....省略
]

●present?メソッド

データやオブジェクトが有効かどうか判定します。オブジェクトがnil、false、空文字列、空白文字、空の配列、空のハッシュならば、「false」を返します。(ちなみにblank?メソッドはこれとは反対の結果を返します)

a = nil
a.present?
=> false

b = 123
b.present?
=> true

g = ""
g.present?
=> false

h = [123]
h.present?
=> true