Recently interpolate_sql has dissapeared from edge in JoinAssociation
(associations.rb)
However there are some lines of code in associations.rb that call this
method, and I'm now getting test failures in my own projects:
NoMethodError: undefined method `interpolate_sql' for
#<ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation:0x398d818>
What's going on? Presumably, at least those method calls shouldn't be
there.
Cheers,
Ian White
Ah, I think I left that out on accident on one of my recent commits.
I'll check it out. What tests are failing? The AR test suite was all
passing when I committed.
--
Rick Olson
http://weblog.techno-weenie.net
http://mephistoblog.com
> Ah, I think I left that out on accident on one of my recent commits.
> I'll check it out. What tests are failing? The AR test suite was all
> passing when I committed.
The problem occurs when you have a has_many :through a has_many which
has conditions.
Luckily, the AR fixtures have an instance of this type of relationship,
so I wrote a small test (http://pastie.caboo.se/17035) that fails in
the current revision, but passes in r5263 (which I believe is the rev
before the change).
Cheers,
Ian
I rolled back the changeset and documented the quirky behavior.
Basically, conditions are usually interpolated in the context of the
actual record. But since the record hasn't been loaded yet with eager
loading, it's interpolated in the context of the class. This gives
you access to the aliased_table_name method which probably comes in
handy for those crazy eager include queries.
Thanks for bringing this up, and let me know if this works out.
Makes sense. Also good to have documented exactly why {:conditions =>
"foo = #{foo}"} won't work in this situation but {:conditions => ["foo
= ?", true]} will
> ... let me know if this works out.
Sure does, thanks!