# New version of Activerecord gives different result

**URL:** <https://www.ruby-forum.com/t/new-version-of-activerecord-gives-different-result/196709>\
**Category:** Rails\
**Created:** [June 10, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/new-version-of-activerecord-gives-different-result/196709 "2008-06-10T21:24:52Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ernsttanaka](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/46a35a/32.png) [@ernsttanaka](https://www.ruby-forum.com/u/ernsttanaka)\
**Post date:** [June 10, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/new-version-of-activerecord-gives-different-result/196709/1 "2008-06-10T21:24:52Z")

</div>

I am sorry, but I am struggling. I installed new versions of my gems and  
my programs don’t run anymore. As suggested I tried to roll back to  
older versions, but that is becoming a bigger mess. The flight forward  
has at least recovered 90% of my application.

Both statement worked perfect with the old version of activerecord.  
Now the first one works okay, the last one does not get the join built  
up in the sql statement.

Again thanks for all the help.  
Ernst

This statement works:

owner = Owner.find(:all, :include =\> {:accounts =\> {:orders =\>{}}},  
:conditions =\> [‘Orders.flag = 0’],  
:order =\> [‘owners.name, accounts.name, orders.id’])

This statement does not work:  
owner = Owner.find(:all,  
:include =\> {:accounts =\> {:trades =\>{}}},  
:order =\> [‘owners.name, accounts.name, trades.underlying, trades.month,  
trades.strategy’] )

* * *

The error I get is a that accounts.name is not a valid column. Which is  
caused by the fact that the join is not added into the SQL statement.

Here is my Schema:  
class Owner \< ActiveRecord::Base  
has\_many :accounts  
end  
class Account \< ActiveRecord::Base  
belongs\_to :owner  
has\_many :trades  
has\_many :orders  
end  
class Order \< ActiveRecord::Base  
belongs\_to :account  
end  
class Trade \< ActiveRecord::Base  
belongs\_to :account  
has\_many :legs  
end  
class Leg \< ActiveRecord::Base  
belongs\_to :trade  
end  
class Earning \< ActiveRecord::Base  
end

---

<div class="post-metadata">

**Author:** ![ernsttanaka](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/46a35a/32.png) [@ernsttanaka](https://www.ruby-forum.com/u/ernsttanaka)\
**Post date:** [June 10, 2008, 11:15pm UTC](https://www.ruby-forum.com/t/new-version-of-activerecord-gives-different-result/196709/2 "2008-06-10T23:15:37Z")

</div>

I found a work around dirty but for now it works.

The difference between the statements is the use of the conditions part.

I added a fake condition

:conditions =\> [‘trades.id = trades.id’]

and now the joins is built as I want.

Definitely a difference between activerecord versions.

Would still appreciate a comment from a experience programmer.

---

<div class="post-metadata">

**Author:** ![ernsttanaka](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/46a35a/32.png) [@ernsttanaka](https://www.ruby-forum.com/u/ernsttanaka)\
**Post date:** [June 10, 2008, 11:33pm UTC](https://www.ruby-forum.com/t/new-version-of-activerecord-gives-different-result/196709/3 "2008-06-10T23:33:52Z")

</div>

On Jun 10, 8:24 pm, Ernst T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> Ernst

Eager loading (:include) changed substantially in 2.1 but should be  
able to fallback to the previous code in cases like this.  
You’ve confused the fallback code by giving an array to :order where  
you should only be giving a string (the first example works because  
the conditions options is able to trigger the fallback.

Fred
