備忘録的な何か

技術ブログ的な何かです

ActiveRecordのwhereが素晴らしい件

Railsのwhereは非常に使い勝手が良い。
慣れれば、普通にSQLを書くより読みやすいと思う。

一番簡単な例だと、次のものになるが、まあ便利ですねくらいのものである。

Article.where(id: [1,3])
 #=> select * from articles where id in (1,3)

しかし、次のようにサブクエリを使うことができる点が素晴らしい。

Article.where(id: Blog.select(id).where(title: 'hoge'))
 #=> select * from articles where id in (select id from blogs where title = 'hoge')

当然、一度変数に落としてサブクエリ化もできる。

sub_query = Blog.select(id).where(title: 'hoge')
Article.where(id: sub_query)
 #=> select * from articles where id in (select id from blogs where title = 'hoge')

他にも、NOT IN な SQLが書けたりする。すごい
Ruby on Rails で NOT IN な SQL をかく。 - そんなこと覚えてない