diff options
author | Ernie Miller <ernie@erniemiller.org> | 2012-08-17 11:31:23 -0400 |
---|---|---|
committer | Ernie Miller <ernie@erniemiller.org> | 2012-08-17 11:31:23 -0400 |
commit | b127d86c1823d60a29191ecc3c21c97ee3ac502c (patch) | |
tree | 2b55c31b9708d671a355e5cb68354ab9cdf1550e /activerecord/lib/active_record/relation/merger.rb | |
parent | 1411fc19862060a959f99be19770fb7eb1ad104f (diff) | |
download | rails-b127d86c1823d60a29191ecc3c21c97ee3ac502c.tar.gz rails-b127d86c1823d60a29191ecc3c21c97ee3ac502c.tar.bz2 rails-b127d86c1823d60a29191ecc3c21c97ee3ac502c.zip |
Fix merge error when Equality LHS is non-attribute
This is at best a band-aid for a more proper fix, since it won't truly
handle the removal of the previous equality condition of these other
nodes. I'm planning to put in some work on ARel toward supporting that
goal.
Related: rails/arel#130, ernie/squeel#153, ernie/squeel#156
Diffstat (limited to 'activerecord/lib/active_record/relation/merger.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/merger.rb | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/merger.rb b/activerecord/lib/active_record/relation/merger.rb index 71aaedee1e..7531f22494 100644 --- a/activerecord/lib/active_record/relation/merger.rb +++ b/activerecord/lib/active_record/relation/merger.rb @@ -97,11 +97,14 @@ module ActiveRecord merged_wheres = relation.where_values + values[:where] unless relation.where_values.empty? - # Remove duplicates, last one wins. + # Remove duplicate ARel attributes. Last one wins. seen = Hash.new { |h,table| h[table] = {} } merged_wheres = merged_wheres.reverse.reject { |w| nuke = false - if w.respond_to?(:operator) && w.operator == :== + # We might have non-attributes on the left side of equality nodes, + # so we need to make sure they quack like an attribute. + if w.respond_to?(:operator) && w.operator == :== && + w.left.respond_to?(:relation) name = w.left.name table = w.left.relation.name nuke = seen[table][name] |