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:
parent
9fbdd9d83e
commit
e2d8250814
2 changed files with 8 additions and 1 deletions
|
@ -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?
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue