Set scope.reordering_value to true if :reordering values are specified

We should call `scope.order!` and set `scope.reordering_value` to `true` if :reordering values are specified

Fixes #21886
This commit is contained in:
akihiro17 2015-10-22 16:11:27 +09:00
parent 59ec8a592d
commit 0fdc2dbe6f
3 changed files with 28 additions and 0 deletions

@ -1,3 +1,9 @@
* Set `scope.reordering_value` to `true` if :reordering values are specified.
Fixes #21886.
*Hiroaki Izu*
* Add support for bidirectional destroy dependencies.
Fixes #13609.

@ -136,6 +136,10 @@ def build_scope
end
scope.order! preload_values[:order] || values[:order]
if preload_values[:reordering] || values[:reordering]
scope.reordering_value = true
end
if preload_values[:readonly] || values[:readonly]
scope.readonly!
end

@ -1179,6 +1179,24 @@ def test_preloading_has_many_through_with_distinct
assert_equal 1, mary.unique_categorized_post_ids.length
end
def test_preloading_has_one_using_reorder
klass = Class.new(ActiveRecord::Base) do
def self.name; "TempAuthor"; end
self.table_name = "authors"
has_one :post, class_name: "PostWithDefaultScope", foreign_key: :author_id
has_one :reorderd_post, -> { reorder(title: :desc) }, class_name: "PostWithDefaultScope", foreign_key: :author_id
end
author = klass.first
# PRECONDITION: make sure ordering results in different results
assert_not_equal author.post, author.reorderd_post
preloaded_reorderd_post = klass.preload(:reorderd_post).first.reorderd_post
assert_equal author.reorderd_post, preloaded_reorderd_post
assert_equal posts(:sti_post_and_comments).title, preloaded_reorderd_post.title
end
def test_preloading_polymorphic_with_custom_foreign_type
sponsor = sponsors(:moustache_club_sponsor_for_groucho)
groucho = members(:groucho)