凡ミスの備忘録的に残す
発生したこと
agathaテーブル
id | name |
---|---|
1 | オーエン夫妻 |
2 | エミリー・キャロライン・ブレント |
3 | トマス・ロジャース |
4 | ジョン・ゴードン・マッカーサー |
5 | エセル・ロジャース |
6 | アンソニー・ジェームズ・マーストン |
このようなテーブルがあって、id=6の削除を行った。(つもり)
christie = Agatha.find_by(6)
christie.destroy
// => id:1のオーエン夫妻が削除される。
思い通りの結果にならない。なぜ。。
SQLみたら判明した
christie = Agatha.find_by(6)
で実行されるSQLは以下だった。
SELECT `agathas`.* FROM `agathas` WHERE (6) LIMIT 1
WHERE句が意味を成さないので、これで取得できるのはid=6のデータではなく、なんか1件だけ取得する。
今回だとidが最小のデータだった。
間違いを修正
find(6)
もしくはfind_by(id: 6)
すべきところをミスってた。
# christie = Agatha.find_by(6)
christie = Agatha.find(6)
christie.destroy
無事、id=1のアンソニー・ジェームズ・マーストンが消えた。
これで物語どおりである。