aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-07-15 16:16:18 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-07-15 16:16:18 -0700
commitd345ed40b5783ec2cb43f4434872ea5b2d57d203 (patch)
tree2e8920c98c6c131461d2c87888b33f298fc898ea /activerecord
parenta618e9e9ddf4b1900c9288625eaa2a9b444dc0c5 (diff)
downloadrails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.tar.gz
rails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.tar.bz2
rails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.zip
use arel rather than slapping together SQL strings
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb6
-rw-r--r--activerecord/test/cases/relation_test.rb9
2 files changed, 10 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index a27b6abe2e..f146c1fdb2 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -285,8 +285,10 @@ module ActiveRecord
references!(references) if references.any?
# if a symbol is given we prepend the quoted table name
- args = args.map { |arg|
- arg.is_a?(Symbol) ? "#{quoted_table_name}.#{arg} ASC" : arg
+ args = args.map! { |arg|
+ arg.is_a?(Symbol) ?
+ Arel::Nodes::Ascending.new(klass.arel_table[arg]) :
+ arg
}
self.order_values = args + self.order_values
diff --git a/activerecord/test/cases/relation_test.rb b/activerecord/test/cases/relation_test.rb
index c92a20bec3..7862d96bd7 100644
--- a/activerecord/test/cases/relation_test.rb
+++ b/activerecord/test/cases/relation_test.rb
@@ -201,8 +201,8 @@ module ActiveRecord
class RelationMutationTest < ActiveSupport::TestCase
class FakeKlass < Struct.new(:table_name, :name)
- def quoted_table_name
- %{"#{table_name}"}
+ def arel_table
+ Post.arel_table
end
end
@@ -224,7 +224,10 @@ module ActiveRecord
test "#order! with symbol prepends the table name" do
assert relation.order!(:name).equal?(relation)
- assert_equal ['"posts".name ASC'], relation.order_values
+ node = relation.order_values.first
+ assert node.ascending?
+ assert_equal :name, node.expr.name
+ assert_equal "posts", node.expr.relation.name
end
test "#order! on non-string does not attempt regexp match for references" do