Blog

ふりがな Rails モデル編

Railsのコードにふりがなをつけて解説します。

今日はこの部分

#すべての単語をDBから取ってきて、文字の長さで降順に並べ thwordsに詰め込む
#ThWordモデルから"word"をgetする ソートする
# pluckについての説明はこちら
thwords= ThWord.all.pluck(:word)
    .sort_by! { |word|word.length }.reverse!

pluckについて

pluckとは摘む、摘み取るという意味です。

必要な属性を取得するためだけに大量のレコードをロードせずに、1つ以上の属性を選択するためのショートカットとして pluckを使います。

allと比較してみます。

このようにallだとidやname,ageなどすべての要素を取得します。

Person.all
=> id=1, name= "Tanaka" age= 34

必要なものだけ取得したいときに pluckを使います。

例えば上記例だと、nameだけ取得したい場合になります。このように記載します。


Person.pluck(:name)

これだと、すべてのデータを取得しないので、メモリを大量に利用することもありません。DBへの操作は常にどのくらいのメモリを使うのか?を頭に入れておかなくてはいけないです。

下記は、Railsの公式サイトに記載されている例に説明を加えたものです。

#Personモデルからnameのプロパティだけを取り出す
Person.pluck(:name)
# SELECT people.name FROM people
# => ['David', 'Jeremy', 'Jose']

#Personモデルから idとnameを取り出す 戻値は配列になる
Person.pluck(:id, :name)
# SELECT people.id, people.name FROM people
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]


#distinctは重複する要素を表示しません。distinctには、明確なという意味があります。
Person.distinct.pluck(:role)
# SELECT DISTINCT role FROM people
# => ['admin', 'member', 'guest']

#Personモデルから、年齢が21の人をMax5人まで取得してそのidを表示しなさい
Person.where(age: 21).limit(5).pluck(:id)
# SELECT people.id FROM people WHERE people.age = 21 LIMIT 5
# => [2, 3]

Rails公式サイトpluck

sort_byについて

rubyの公式サイトにはこのように説明があります。

ブロックの評価結果を <=> メソッドで比較することで、self を昇順にソートします。ソートされた配列を新たに生成して返します。

つまり、以下とほぼ同じ動作をします。

Ruby3.1公式サイト

ブロックの中は、いまこうなっています。ThWordモデルの wordプロパティをすべて取得しています。

それをsort_byによって、ブロックの条件により、順番に並びかえます。

thwords= ThWord.all.pluck(:word) 

#ここ
.sort_by! { |word| word.length }.reverse!

ブロックに記載されている、並び替えの条件は、文字列の長さです。

{ |word| word.length }

そしてreverseしています。つまり文字列を長い順番に並び替えています。

thwords= ThWord.all.pluck(:word) 

                                # reverse!で配列を逆順にする
.sort_by! { |word| word.length }.reverse!

今日はここまで。

コードにふりがなを付けることにより、初学者の理解が深まると思い記事を書いてみました。

ここまで読んでいただいてありがとうございます。

ご連絡、質問は、Facebook よりお願いいたします。

コネクト facebook page