Rails 3 アプリケーションに次のスコープを実装しました。
scope :popular, lambda { |l = 5| order('views desc').limit(l) }
ただし、そのレコードを直接カウントしようとすると、スコープ フィルターが適用されないようです。
例えば:
Post.popular.size #=> 20
ログを確認すると、次のクエリが実行されます。
SQL (0.4ms) SELECT COUNT(*) AS count_id FROM `posts` LIMIT 5
今私が実行すると
Post.popular.all.size #=> 5
そして、正しいクエリが実行されます:
Post Load (1.5ms) SELECT `posts`.* FROM `posts` ORDER BY views desc LIMIT 5
他の誰かがこの種の行動を経験しましたか? もしそうなら、これが予想される動作なのか、それともバグに直面しているのでしょうか?
敬具、DBA