1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Blacklist->whitelist for reference scans in order!

Stop special-casing Arel::Nodes as exempt from reference scanning in
order. Instead, only scan order values that are strings for a table
reference.
This commit is contained in:
Ernie Miller 2013-07-14 13:53:38 -04:00
parent 9fbdd9d83e
commit e2d8250814
2 changed files with 8 additions and 1 deletions

View file

@ -280,7 +280,7 @@ module ActiveRecord
args.flatten!
validate_order_args args
references = args.reject { |arg| Arel::Node === arg }
references = args.grep(String)
references.map! { |arg| arg =~ /^([a-zA-Z]\w*)\.(\w+)/ && $1 }.compact!
references!(references) if references.any?

View file

@ -227,6 +227,13 @@ module ActiveRecord
assert_equal ['"posts".name ASC'], relation.order_values
end
test "#order! on non-string does not attempt regexp match for references" do
obj = Object.new
obj.expects(:=~).never
assert relation.order!(obj)
assert_equal [obj], relation.order_values
end
test '#references!' do
assert relation.references!(:foo).equal?(relation)
assert relation.references_values.include?('foo')