I have created a barebones Rails app demonstrating this bug:
https://github.com/coreyward/bug-demo
I also have a Question open on StackOverflow about this:
http://stackoverflow.com/questions/5199235/activerecord-query-chang...
I don't have the skills/knowledge to know A) where this is
coming from or B) how to fix it. Any help would be very much
appreciated.
This bug occurs when you have a "child" model (one that
belongs_to another model) with an order
scope on it and you try to set a where condition.
So for the following models:
class Person < ActiveRecord::Base
has_many :items
end
class Item < ActiveRecord::Base
belongs_to :person
default_scope order(:ordinal)
end
With the following calls:
Person.includes(:items).where(:name => 'John')
# or
Person.includes(:items).find_by_name 'John'
The items loaded are ordered by the ordinal on each
Item.
If you introduce a period into the name, though (e.g.
"John.Smith"), the order scope is ignored.
To see this in action...
$ git clone git://github.com/coreyward/bug-demo.git
$ cd bug-demo
$ rake db:create db:migrate db:seed
$ rails s
And then fire up http://localhost:3000/ and see for
yourself.