I've recently upgraded from Rails 4.1.4 to 4.2.8 and I got very strange behavior.
So we have table
class Identity < ActiveRecord::Base
and tables Doctor, Assistant, Substitute
that are inherited from it.
So when I'm outside of any of those classes and do call (rails console, specs)
Doctor.all.to_sql
=>
"SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')"
which is good.
When I do same call but from class method in Assistant model, it produces following
Doctor.all.to_sql
=>
"SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Assistant', 'Substitute')"
which is wrong.
While i'm inside class method in Assistant model and do
Doctor.unscoped.all
=> "SELECT \"identities\".* FROM \"identities\" WHERE \"identities\".\"type\" IN ('Doctor')"
good query.
I've checked if we set default_scope somewhere but we don't. Also, it's quite tricky as when I do
SomeTable.joins(:identities)
I can't unscope identities
which leads me to wrong query.
So, I'm not quite sure what's happened after upgrading, but I know it does works with old Rails 4.1.4.
Any hint would be helpful.
Regads
After upgrading to Rails 4.2.11, issue has gone. I will put some more effort to reproduce this behavior on older versions and to report to rails team if necessary.