学習バンザイITエンジニアの精神安穏日記

ITエンジニアというより、IT系雑務者

ActiveRecord has_manyをhas_oneしたときの挙動

## 簡易モデル
class User
  has_many :posts
  has_one :post
end

class Post
  belongs_to :user
end

userに複数のpostが紐づくとき、has_one postは何になるか

user = User.find(1)
user.post
=> ???

以下のようなsqlが発行されるが、order byの指定がない postが複数ある場合、どんな順番で返ってくるのか?

SELECT  "posts".* FROM "posts" WHERE "posts"."user_id" = $1 LIMIT $2  [["user_id", 1], ["LIMIT", 1]]
  • updateされた順? x
  • create順? x
  • id順? x

  • システムが計算過程で見つけた順番

参考: SELECTpostgresql以外の挙動は不明

まとめ

必要に応じて順番明示したほうが良い