In Rails 3.1 Model.count() ignores :include - no outer join in generated SQL


At first I posted this in rubyonrails-talk, but no one there was able to tell me if this is a bug or not (I got only suggestion for workaround).
As this looks like 3.1 regression that breaks existing 3.0.10 code I decided to post this here in addition.

I’ve upgraded to Rails 3.1 (from 3.0.10), ran my test suite and found this issue:

class Trade < ActiveRecord::Base
has_many :transaction_trades

def Trade.do_something
stale_trades = Trade.count(‘’,
:include => :transaction_trades,
:group => ‘’)
:having => “count_transaction_trades_id = 0”)

Earlier this used to work perfectly, now I get this:

Mysql2::Error: Unknown column ‘’ in ‘field list’:
SELECT COUNT( AS count_transaction_trades_id, AS trades_id FROM trades GROUP BY

What puzzles me is that no LEFT OUTER JOIN on transaction_trades is
present in generated SQL - that’s why things broke.
And it was there in 3.0.10, so table got joined and this code was perfectly working.

Any hints what’s wrong here? Why is :include => :transaction_trades seems to be ignored?


Here is pull request for this bug


Oh, great, thanks for the heads up!

I really know almost nothing about RoR release process, so one more little question:

should I expect this fix to be in the next minor release (i.e. 3.1.1) ?

Thanks :slight_smile:


We're aiming to release 3.1.1 on Monday 12th, and if the pull request
can be merged before then, it will be.

That would be great! Thank you! :slight_smile: