Davis W. Frank's blog



Davis W. FrankDavis W. Frank
Standup 2010.08.06: Evil Scopiness Edition
edit Posted by Davis W. Frank on Friday August 06, 2010 at 12:57PM

Interesting Things

find_in_batches has Evil Scopiness

ActiveRecord::Base#find_in_batches() (and therefore #find_each()) is applying a scope around the block it is given, which applies to any subsequent find call on that model:

Let's say we have a Comment model that act_as_tree so comments can be threaded. In the following code:

Comment.find_each(:conditions => "comments.state = 'published'") do |comment| puts comment.parent.content end

The association call to .parent will also have the scope {:conditions => "comments.state = 'published'"} applied to it. This can have highly unexpected side-effects.

The way to get around this is:

Comment.find_each(:conditions => "comments.state = 'published'") do |comment| Comment.with_exclusive_scope(:find => {}) do puts comment.parent.content end end

Easy Ruby profiling

If you're profiling Ruby code often, here's a code snippet that can be useful: