I just found this ticket because I noticed the same issue.
http://dev.rubyonrails.org/ticket/6251
The official response was that it's not a bug because when you use
:joins you are "riding close to the metal". But I'm at a loss as to
figure out why this behavior even needs to exist.
Every table (except HABTM links) in a typical Rails app is going to
have an id column, so that means any JOIN by default is going to be
clobbering ids. Most of the useful ad-hoc attributes that you would
want to add to an query would have to be specified in the :select
option anyway... how often do you just want to glom on all the
attributes of some other table directly?
A default of SELECT table_name.* in the presence of a :joins option
just seems to make sense all around. Is there some benefit to always
using SELECT * that warrants using it as the default even when it
opens the door for such dangerous and unexpected behavior?
At the very least the documentation for :joins should say "always
specify :select or else..."
A default of SELECT table_name.* in the presence of a :joins option
just seems to make sense all around. Is there some benefit to always
using SELECT * that warrants using it as the default even when it
opens the door for such dangerous and unexpected behavior?
That sounds like it could be a nice little patch, give it a try and
reply here once it's uploaded.
At the very least the documentation for :joins should say "always
specify :select or else..."
Agreed, if you can't get the solution above to work, send us a docs patch.
Alright, your wish is my command:
http://dev.rubyonrails.org/ticket/8889
The solution is 1.5 lines, and I have a test included. Tested under
mysql... not sure if the syntax can be assumed the way I did it for
all cases...
http://dev.rubyonrails.org/ticket/8889
The solution is 1.5 lines, and I have a test included. Tested under
mysql... not sure if the syntax can be assumed the way I did it for
all cases...
I've applied the fix because I've also been bitten by this. But we'll
have to keep an eye out for surprising breakages in existing apps.
Thanks!
Great, thanks. If anything goes wrong I'll definitely be around to
add additional test cases and further tweaks if necessary.