この記事は
- Railsで簡単にnot exists的なことやりたくてgem発見したのでメモです
やりたかったこと
- 具体例)
-
Country => State => City
とアソシエーションがあったとします -
City#rate
には0,1,2という3種類の値が入っているとします - ここで全ての
City
のrate
が2
のCountry
だけを取得したかったです
-
調べると
-
find_by_sql
つかえ!とかArel
つかえ!ばかり出てきてつらみ
where_exists gem
- そこはRuby/Railsのことですから、where_existsというgemがありました
使い方
-
Country
にhas_many :cities, through: states
を書いておきます - で、こんな感じでやりたいことができます
Country.where_exists(:cities, rate: 2).where_not_exists(:cities, rate: [0, 1])
- なんでexists/not_existsを2回かかなきゃいかんのかは納得行ってません
- あと発行されるSQLが結構グチャグチャしてて、なんかすごく無駄なことやってそう
終わりに
- こういうのもうちょっと洗練させて標準に入れ込んで欲しい