mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
e93f416abe
#29589 changed merging scope order to allow to unscope default scopes on association scope (#29611), but that caused a regression #38811 that accidentally allow join constraint which is required. ``` % bin/test test/cases/associations/has_many_associations_test.rb -n test_unscopes_the_default_scope_of_associated_model_when_used_with_include Run options: -n test_unscopes_the_default_scope_of_associated_model_when_used_with_include --seed 32978 # Running: E Error: HasManyAssociationsTest#test_unscopes_the_default_scope_of_associated_model_when_used_with_include: NoMethodError: undefined method `children' for nil:NilClass ~/rails/activerecord/lib/active_record/associations/join_dependency/join_association.rb:39:in `block in join_constraints' ~/rails/activerecord/lib/active_record/associations/join_dependency/join_association.rb:30:in `reverse_each' ~/rails/activerecord/lib/active_record/associations/join_dependency/join_association.rb:30:in `with_index' ~/rails/activerecord/lib/active_record/associations/join_dependency/join_association.rb:30:in `join_constraints' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:171:in `make_constraints' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:196:in `block in walk' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:196:in `each' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:196:in `flat_map' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:196:in `walk' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:90:in `block in join_constraints' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:87:in `each' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:87:in `flat_map' ~/rails/activerecord/lib/active_record/associations/join_dependency.rb:87:in `join_constraints' ~/rails/activerecord/lib/active_record/relation/query_methods.rb:1226:in `build_join_query' ~/rails/activerecord/lib/active_record/relation/query_methods.rb:1211:in `build_joins' ~/rails/activerecord/lib/active_record/relation/query_methods.rb:1091:in `build_arel' ~/rails/activerecord/lib/active_record/relation/query_methods.rb:1063:in `arel' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:419:in `block in limited_ids_for' ~/rails/activerecord/lib/active_record/relation.rb:867:in `skip_query_cache_if_necessary' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:419:in `limited_ids_for' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:398:in `apply_join_dependency' ~/rails/activerecord/lib/active_record/relation.rb:839:in `block in exec_queries' ~/rails/activerecord/lib/active_record/relation.rb:867:in `skip_query_cache_if_necessary' ~/rails/activerecord/lib/active_record/relation.rb:834:in `exec_queries' ~/rails/activerecord/lib/active_record/relation.rb:639:in `load' ~/rails/activerecord/lib/active_record/relation.rb:250:in `records' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:508:in `find_take' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:98:in `take' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:458:in `find_one' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:442:in `find_with_ids' ~/rails/activerecord/lib/active_record/relation/finder_methods.rb:69:in `find' ~/rails/activerecord/test/cases/associations/has_many_associations_test.rb:2689:in `block in <class:HasManyAssociationsTest>' bin/test test/cases/associations/has_many_associations_test.rb:2683 ``` Required join constraint should not be allowed to unscoping. Fixes #38811.
36 lines
1.2 KiB
Ruby
36 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Car < ActiveRecord::Base
|
|
has_many :bulbs
|
|
has_many :all_bulbs, -> { unscope(where: :name) }, class_name: "Bulb"
|
|
has_many :all_bulbs2, -> { unscope(:where) }, class_name: "Bulb"
|
|
has_many :other_bulbs, -> { unscope(where: :name).where(name: "other") }, class_name: "Bulb"
|
|
has_many :old_bulbs, -> { rewhere(name: "old") }, class_name: "Bulb"
|
|
has_many :funky_bulbs, class_name: "FunkyBulb", dependent: :destroy
|
|
has_many :failed_bulbs, class_name: "FailedBulb", dependent: :destroy
|
|
has_many :foo_bulbs, -> { where(name: "foo") }, class_name: "Bulb"
|
|
has_many :awesome_bulbs, -> { awesome }, class_name: "Bulb"
|
|
|
|
has_one :bulb
|
|
|
|
has_many :tyres
|
|
has_many :engines, dependent: :destroy, inverse_of: :my_car
|
|
has_many :wheels, as: :wheelable, dependent: :destroy
|
|
|
|
has_many :price_estimates, as: :estimate_of
|
|
|
|
scope :incl_tyres, -> { includes(:tyres) }
|
|
scope :incl_engines, -> { includes(:engines) }
|
|
|
|
scope :order_using_new_style, -> { order("name asc") }
|
|
|
|
attribute :wheels_owned_at, :datetime, default: -> { Time.now }
|
|
end
|
|
|
|
class CoolCar < Car
|
|
default_scope { order("name desc") }
|
|
end
|
|
|
|
class FastCar < Car
|
|
default_scope { order("name desc") }
|
|
end
|