問題点
ActiveRecord::Relationはmapやselect, eachなどのArray, Hash等で使えるメソッドをカバーしてくれています。のでcountもArray同様の振る舞いを行ってくれると思って、ブロックを渡すと…
User.create(name: 'hoge')
User.all.count { |user| user.name == 'fuga' }
=> 1
array = ['hoge']
array.count { |name| name == 'fuga' }
=> 0
こうなります。ActiveRecord::Relationではcountメソッドが条件判断をよしなにしてくれないのです。
※User.all.countという流れがありえんというツッコミは止めて下さい死んでしまいます
解決
なので先にwhereを噛まそうねという話
User.create(name: 'hoge')
User.where(name: 'fuga').count
=> 0
処理が複雑になってくると、何処までがActiveRecord::Relationなのがこんがらがることがあるので、注意したいのでした