• J
    Fix scope chaining + STI · 8606a7fb
    Jon Leighton 提交于
    See #9869 and #9929.
    
    The problem arises from the following example:
    
        class Project < ActiveRecord::Base
          scope :completed, -> { where completed: true }
        end
    
        class MajorProject < Project
        end
    
    When calling:
    
        MajorProject.where(tasks_count: 10).completed
    
    This expands to:
    
        MajorProject.where(tasks_count: 10).scoping {
          MajorProject.completed
        }
    
    However the lambda for the `completed` scope is defined on Project. This
    means that when it is called, `self` is Project rather than
    MajorProject. So it expands to:
    
        MajorProject.where(tasks_count: 10).scoping {
          Project.where(completed: true)
        }
    
    Since the scoping was applied on MajorProject, and not Project, this
    fails to apply the tasks_count condition.
    
    The solution is to make scoping apply across STI classes. I am slightly
    concerned about the possible side-effects of this, but no tests fail and
    it seems ok. I guess we'll see.
    8606a7fb
named.rb 6.7 KB