駆け出しエンジニアの気ままブログ

気になったことについて、調べながら投稿するブログです。

ActiveRecordで使えるFirstメソッドは、必ず先頭を取得しているわけではない

概要

RailsActiveRecordでよく使う、firstメソッド。

よく User.firstのような形でコンソールでサンプルを取得する時に使うのではないでしょうか

今回、firstメソッドについて書いてみました

内容

firstメソッドは、IDが先頭のレコードを返しているのか?

こちらのメソッドを使うことで、ActiveRecordのテーブルの最初のレコードを取得できます。 しかし、必ずIDが1のレコードを持ってきているわけではありません。

# 必ず idの順番で並んでいるわけではない…
u = User.first
#<User id: 1, name: taro, email: test@example.com >

なぜなら、レコードの順番はDBの設定によるからです。テーブル設計段階でIDではないカラムがレコードの順番を決めている場合、firstで取得しているのは、id = 1 のレコードではなくなります

User.first は id 1 というレコードではありません!!!

テストや実装等では、必ず User.find(1), User.find_by(id: 1)のようにid(他カラムも)を指定して レコードを取得するようしましょう

まとめ

今回は、文章が多くなってしまいましたが、

最後まで読んでいただき、ありがとうございました。