Sequelでハマったのでメモ。
JOIN
Sequelでjoinするときにjoinされるテーブルとjoinするテーブル双方にidがあると、fetchの結果のidがjoinするテーブル側になる場合があります。
どっちのidも必要な場合は、graphを使いましょう。
LIKE
SequelのlikeはデフォルトだとLIKE BINARYを発行するので、大文字小文字が区別されてしまいます。
ilikeを使いましょう。
ハマるたびに更新していこう、この記事・・・
IN
DB[:users].where(:name => []).all
where条件に空配列加えたときのクエリが、以下になります。
SELECT * from users where name != name;
こいつ、テーブル内をすべてスキャンするのでとても重い上に、何も返ってこないという酷いもので、スロークエリに頻繁に登場していた。
最初原因が分からなくて、なんぞ!ってキレたくなったのがこいつです。
空配列はsequelに突っ込んではいけません。