countメソッドを使ってカラム値の合計を求めるのに苦労したのでメモ
ruby 2.6.3
rails 5.1.6
##特定の文字数や要素をカウントしたい場合
主の場合、Userモデル(親)、Wordモデル(子)という状況でUserモデルのViewでWordモデルのcompleteカラムのtrueという値がいくつあるのかを表示したいか模索していました。
##結論
特定の文字数や要素をカウントしたい場合はcountメソッドを使うとよい。
lengthやsizeといったメソッドもあるが、そちらはまた別の機会に。
##モデルの状況
User.rb
id | name | |
---|---|---|
1 | saber | ~~ |
2 | lancer | ~~ |
3 | archer | ~~ |
4 | caster | ~~ |
Word.rb
id | english | japanese | complete | user_id |
---|---|---|---|---|
1 | saber | セイバー | true | 1 |
2 | lancer | ランサー | true | 1 |
3 | archer | アーチャー | false | 1 |
4 | caster | キャスター | false | 1 |
このモデル関係の中でWordモデルのcompleteカラムのtrue/falseの数をUserモデルのビューに出力したいとき
users/show.html.erb
@user = User.find(params[:id]) #userコントローラーで定義
<%= @user.words.count{|i| i.complete? === true} %>
=>2
<%= @user.words.count{|i| i.complete? === false} %>
=>2
他にもwhereとかcountで他の方法が出てきたので試行錯誤してみましたが求めていた数値は出てこず。
この方法に出会うまで数時間を要しました。。。。
最近DBから特定の値を引っ張り出す?ことが多くわからないところが多いですが、その都度調べ上げ知識をつける=>アウトプットのサイクルで勉強にもなるのでいいかなーと思ってみたりしています。