Doctor, doctor; Why is my ActiveRecord scope eager-loading?
Whilst refactoring out a Query Object (explained in the excellent @codeclimate blog post 7 Patterns to Refactor Fat ActiveRecord Models), I came across a weird issue where my scoped model was eagerly loading.
E.g.
irb(main):029:0> User.scoped
User Load (248.5ms) SELECT "users".* FROM "users"
.... SQLWTF!!1!
After pondering this for a while, and reading the docs, I realised the problem was that the console I was testing in wants to inspect the last statement, and therefore it was executing the scope.
You can get around this by popping something else at the end of the statement for the console to evaluate:
irb(main):030:0> u = User.scoped; nil
=> nil
irb(main):031:0> u.count
(78.1ms) SELECT COUNT(*) FROM "users"
=> 909164
BOOM!
Written by Stuart Liston
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Activerecord
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#