前提・実現したいこと
データベースから取得したレコードはハッシュとして扱われているのでしょうか?
それともハッシュのような何か...なのでしょうか?
もしハッシュであるならば、each_valueメソッドでレコードのバリューを一括で取り出して、配列に格納したいと考えています。
状況
scoresテーブルがあります。
国語、算数、英語の点数を登録できます。
column | type |
---|---|
japanese | integer |
math | integer |
english | integer |
コントローラーで登録済みのスコアを取得し、変数に代入します。
@score = Score.find(1)
rails consoleで中を見ます。
=>#<Score: 0x00007fe833509330 id: 1, japanese: 75, math: 70, english: 39, created_at: //省略 updated_at: //省略 >
カラムごとに値を取り出します。
@score.japanese // => 75 @score.math // => 70 @score.english // => 39 または @score[:japanese] // => 75
値を配列に格納します。
@values = [] @values << @score.japanese @values << @score.math @values << @score.english // => [75, 70, 39]
ただ、例にあげているテーブルのカラム数は3つだけ、と規模がかなり小さいからこそ一つ一つ手動で配列に格納していくことができるわけで、仮にカラムの数が膨大な数字になった時に、上記の用に記述してしまうとかなり冗長になってしまい、できれば避けたいです。
そこで、ハッシュに対して使えるeach_valueメソッドを使い、一気にvalueを配列に格納する方法を検討しました。
@values = [] @score.each_value do |v| @values << v end
しかし、これが全く効きません。
自分で適当にハッシュを作って試せば、しっかりと動いてくれますが、レコードを代入したインスタンス変数には効いてくれません。
これはなぜなのでしょうか?
@score[:math]
レコードとはキーバリュー形式である、と未だに考えております。しかし、ハッシュ用のメソッドが効かない。
上記のような記述はまさにハッシュからバリューを取り出す時の記述そのものにしか見えなくて混乱しています。
ご存知の方いらっしゃいましたら、ご教示いただければ幸いです。
補足情報(FW/ツールのバージョンなど)
rails 6
mysql
macOS Big Sur
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/05 05:19