普通に凡ミスしてたのでメモ
やりたかったこと
# パラメータからとってきたID id = "1" User.find(id)
実行されるSQLの想定
SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
起きたこと
# パラメータからとってきたID id = "1" # タイプミスしてfind_by User.find_by(id)
期待値としては 『1をfind_byしてもカラム名がないから…』
ArgumentError: Unsupported argument type: 1 (Integer)
となってエラーになるかと思いきや、下のクエリが動く
SELECT `users`.* FROM `users` WHERE (1) LIMIT 1
しかもそれっぽい結果が帰ってくるので紛らわしい
原理
find_byはこういう使い方もできるから、文字列が引数に来ると勘違いする
User.find_by("id = 1")
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE (id = 1) LIMIT 1
ほんと気をつけようというTips