reorder without arguments is ignored inside scopes when there is a default scope. However, with arguments will work as expected. In order words, there seems to be no way to clear a sort entirely from within a scope lambda expression. For example:
class MyDoc
include Mongoid::Document
default_scope ->{ asc(:foo, :bar) }
scope :scope_1 ->{ where(foo: "hello").reorder }
scope :scope_2 ->{ where(foo: "hello").reorder(bar: :asc) }
end
then
MyDoc.scope_1 #=> sorts by foo: 1, bar: 1; I expected to have no sort
MyDoc.scope_2 #=> sorts by bar: 1 as expected
This is important in some cases when using indexes, sometimes a sort will cause MongoDB to skip using an index when using complex expressions.
reorderwithout arguments is ignored inside scopes when there is a default scope. However, with arguments will work as expected. In order words, there seems to be no way to clear a sort entirely from within a scope lambda expression. For example:then
This is important in some cases when using indexes, sometimes a sort will cause MongoDB to skip using an index when using complex expressions.