diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-15 16:16:18 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-15 16:16:18 -0700 |
commit | d345ed40b5783ec2cb43f4434872ea5b2d57d203 (patch) | |
tree | 2e8920c98c6c131461d2c87888b33f298fc898ea | |
parent | a618e9e9ddf4b1900c9288625eaa2a9b444dc0c5 (diff) | |
download | rails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.tar.gz rails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.tar.bz2 rails-d345ed40b5783ec2cb43f4434872ea5b2d57d203.zip |
use arel rather than slapping together SQL strings
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/relation_test.rb | 9 |
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 |