(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

scopeはlambdaで書いて

軽くハマッたので。

class User < ActiveRecord::Base
  scope registered:, where(registered: true)
end

って書いてしまうと

User.registered.where('age < 20')

こう書いたときと

User.where('age < 20').registered

こう書いたときの結果が変わってしまう。*1
具体的には開発時とかに追加したはずのデータが正しく取得されなかったりする。

Rails4以降でのscopeの書き方はlambdaが必須なので、以下のように書くのが正しい。

class User < ActiveRecord::Base
  scope registered:, -> {where(registered: true)}
end

*1:というか、正常に動いてないんだけど