Keyが整数の場合、Person.find("123ABC")という文字列を渡すとto_iで数値に変換され、Person.find(123)と評価される。Keyが整数、/persons/:idの形式で渡されるIDを使ってPerson.find(params[:id)のようにクエリを投げている処理があるという前提。アクセスログを眺めていたら/persons/123ABCのように文字列を入れてアクセスしてきているケースがあった。ActiveRecordのfindでは指定されたIDを持つレコードが見つからなければActiveRecord::RecordNotFoundがraiseされるはずが、普通にアクセスできてしまうことに気付く。123のレコードのデータが表示されている)よくよくドキュメントを読んでみると以下の記載があった。全て以下と同じ結果になるPerson.find(10)Person.find("1")のように文字列で指定しても動くのは知ってたけど、Person.find("31-sarah")のように数値以外の文字が含まれていても動くのは知らなかったので備忘録。naohisahiバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。