aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorNick Kallen <nkallen@nick-kallens-computer-2.local>2008-04-27 20:40:20 -0700
committerNick Kallen <nkallen@nick-kallens-computer-2.local>2008-04-27 20:40:20 -0700
commit3ae7a601e962468468eac1399ebdfd7113730310 (patch)
tree548407d22d1799f20366c3a122fb4593002e5063 /lib
parent4a6822d5e416f2e687d32a14ff98c7b5c815369c (diff)
downloadrails-3ae7a601e962468468eac1399ebdfd7113730310.tar.gz
rails-3ae7a601e962468468eac1399ebdfd7113730310.tar.bz2
rails-3ae7a601e962468468eac1399ebdfd7113730310.zip
attribute disambiguation
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/relations/join.rb14
-rw-r--r--lib/arel/relations/relation.rb4
2 files changed, 6 insertions, 12 deletions
diff --git a/lib/arel/relations/join.rb b/lib/arel/relations/join.rb
index d5ec9d43bd..e5ca49c284 100644
--- a/lib/arel/relations/join.rb
+++ b/lib/arel/relations/join.rb
@@ -24,17 +24,9 @@ module Arel
end
def prefix_for(attribute)
- if relation1[attribute] && !relation2[attribute]
- externalize(relation1).prefix_for(attribute)
- elsif relation2[attribute] && !relation1[attribute]
- externalize(relation2).prefix_for(attribute)
- else
- if (attribute % relation1[attribute]).size < (attribute % relation2[attribute]).size
- externalize(relation1).prefix_for(attribute)
- else
- externalize(relation2).prefix_for(attribute)
- end
- end
+ externalize([relation1[attribute], relation2[attribute]].select { |a| a =~ attribute }.min do |a1, a2|
+ (attribute % a1).size <=> (attribute % a2).size
+ end.relation).prefix_for(attribute)
end
# TESTME: Not sure which scenario needs this method, was driven by failing tests in ActiveRecord
diff --git a/lib/arel/relations/relation.rb b/lib/arel/relations/relation.rb
index c8602d22e3..3bd40e8f6b 100644
--- a/lib/arel/relations/relation.rb
+++ b/lib/arel/relations/relation.rb
@@ -139,7 +139,9 @@ module Arel
end
def attribute_for_attribute(attribute)
- attributes.detect { |a| a =~ attribute }
+ attributes.select { |a| a =~ attribute }.min do |a1, a2|
+ (attribute % a1).size <=> (attribute % a2).size
+ end
end
end
include AttributeAccessors