ダメでしょ!

プログラミングとか怒られた話とか…

ActiveRecord に対する scope は条件に一致するレコードが存在しない場合 .all の結果を返却する

scope を利用していたところ、思わぬところでハマってしまいました。。 指定の条件で検索を行い、返却された結果が nil かどうかで条件分岐させようと思っていたのですが、scope を利用すると常に nil ではなく、.all の結果が返却されてきます。

scope :search_with_user, -> (user_id) { where('user_id = ?', user_id) }

よくよく調べて見たところ、 scope はメソッドチェーンを実現するために、nil を返すことはなく、.all を返すんだとか。

要は scope の利用方法に関する認識不足だったのですが、他の人も同じような勘違いをする可能性もあるかも、と思ったのでブログに残しておきます。