はじめに
公式ドキュメントを見ながら、黙々と開発をしている中で、whereとfindの違いについて危険な勘違いをしていたのでここで共有します。
私の勘違い
私はこれまで、whereとfindの違いを、条件に一致したオブジェクトを複数返すか、1個返すかの違いでしかありませんでした。しかし、先日以下のようなコードを書いた時にうまく動かなくて、、、、じつは上述の考え方は50点でした
@game=Game.where(id:3) #1個だけしか当てはまらない
puts"#{@game.name}" #だからこんな感じでと!って動かない
正しい考え方
私の考えに足りなかったのは、どう返ってくるかという点です。whereが条件に一致した複数のオブジェクトを返すというのは正しいのですが、実は配列として返ってくるのです。つまり上記のコードを動かそうとするのであれば、以下のような形にしなければなりません。
game=Game.where(id:3)
@first_game=game.first #配列で返ってきた物から、1つ目の要素を取得
puts"#{@first_game.name}"
終わりに
こうした基礎の奥を見ていくことは本当に重要ですね。わかったふりして使っていても、いずれエラーにぶち当たるかと思うので、基礎の深掘りをすることをお勧めします!