1. 15 11月, 2019 1 次提交
  2. 02 10月, 2019 1 次提交
  3. 13 6月, 2019 1 次提交
  4. 06 4月, 2019 1 次提交
  5. 15 2月, 2019 1 次提交
  6. 07 2月, 2019 1 次提交
    • R
      Refactor around scoping · 2e018361
      Ryuta Kamizono 提交于
      Don't use `false` as special value to skip to find inherited scope, we
      could use `skip_inherited_scope = true`, and move `_scoping` back on
      Relation.
      2e018361
  7. 05 2月, 2019 1 次提交
    • R
      Chaining named scope is no longer leaking to class level querying methods · 2935d075
      Ryuta Kamizono 提交于
      Active Record uses `scoping` to delegate to named scopes from relations
      for propagating the chaining source scope. It was needed to restore the
      source scope in named scopes, but it was caused undesired behavior that
      pollute all class level querying methods.
      
      Example:
      
      ```ruby
      class Topic < ActiveRecord::Base
        scope :toplevel, -> { where(parent_id: nil) }
        scope :children, -> { where.not(parent_id: nil) }
        scope :has_children, -> { where(id: Topic.children.select(:parent_id)) }
      end
      
      # Works as expected.
      Topic.toplevel.where(id: Topic.children.select(:parent_id))
      
      # Doesn't work due to leaking `toplevel` to `Topic.children`.
      Topic.toplevel.has_children
      ```
      
      Since #29301, the receiver in named scopes has changed from the model
      class to the chaining source scope, so the polluting class level
      querying methods is no longer required for that purpose.
      
      Fixes #14003.
      2935d075
  8. 21 12月, 2018 1 次提交
  9. 09 10月, 2018 1 次提交
    • R
      Generate delegation methods to named scope in the definition time · 136b738c
      Ryuta Kamizono 提交于
      The delegation methods to named scope are defined when `method_missing`
      is invoked on the relation.
      
      Since #29301, the receiver in the named scope is changed to the relation
      like others (e.g. `default_scope`, etc) for consistency.
      
      Most named scopes would be delegated from relation by `method_missing`,
      since we don't allow scopes to be defined which conflict with instance
      methods on `Relation` (#31179). But if a named scope is defined with the
      same name as any method on the `superclass` (e.g. `Kernel.open`), the
      `method_missing` on the relation is not invoked.
      
      To address the issue, make the delegation methods to named scope is
      generated in the definition time.
      
      Fixes #34098.
      136b738c
  10. 11 9月, 2018 2 次提交
  11. 27 3月, 2018 1 次提交
    • R
      Bring back private class methods accessibility in named scope · b9be64cc
      Ryuta Kamizono 提交于
      The receiver in a scope was changed from `klass` to `relation` itself
      for all scopes (named scope, default_scope, and association scope)
      behaves consistently.
      
      In addition. Before 5.2, if both an AR model class and a Relation
      instance have same named methods (e.g. `arel_attribute`,
      `predicate_builder`, etc), named scope doesn't respect relation instance
      information.
      
      For example:
      
      ```ruby
      class Post < ActiveRecord::Base
        has_many :comments1, class_name: "RecentComment1"
        has_many :comments2, class_name: "RecentComment2"
      end
      
      class RecentComment1 < ActiveRecord::Base
        self.table_name = "comments"
        default_scope { where(arel_attribute(:created_at).gteq(2.weeks.ago)) }
      end
      
      class RecentComment2 < ActiveRecord::Base
        self.table_name = "comments"
        default_scope { recent_updated }
        scope :recent_updated, -> { where(arel_attribute(:updated_at).gteq(2.weeks.ago)) }
      end
      ```
      
      If eager loading `Post.eager_load(:comments1, :comments2).to_a`,
      `:comments1` (default_scope) respects aliased table name, but
      `:comments2` (using named scope) may not work correctly since named
      scope doesn't respect relation instance information. See also 801ccab2.
      
      But this is a breaking change between releases without deprecation.
      I decided to bring back private class methods accessibility in named
      scope.
      
      Fixes #31740.
      Fixes #32331.
      b9be64cc
  12. 28 11月, 2017 1 次提交
  13. 06 11月, 2017 1 次提交
  14. 15 8月, 2017 1 次提交
  15. 20 7月, 2017 1 次提交
  16. 02 7月, 2017 1 次提交
  17. 01 7月, 2017 1 次提交
  18. 27 6月, 2017 1 次提交
  19. 01 6月, 2017 1 次提交
    • R
      The receiver in a scope should be a `relation` · 4bdd86fb
      Ryuta Kamizono 提交于
      Currently the receiver in a scope is `klass`, not `relation`.
      I think it is a strange because the receiver in `default_scope` and a
      scope on association is `relation`.
      I fixed to the receiver is to be a `relation` properly for consistency.
      4bdd86fb
  20. 30 5月, 2017 1 次提交
  21. 28 5月, 2017 1 次提交
  22. 24 5月, 2017 1 次提交
  23. 29 12月, 2016 1 次提交
  24. 24 12月, 2016 1 次提交
  25. 27 10月, 2016 1 次提交
  26. 07 8月, 2016 1 次提交
  27. 03 8月, 2016 1 次提交
  28. 28 1月, 2016 1 次提交
    • A
      Revert "Remove valid_scope_name? check - use ruby" · dc925119
      Akira Matsuda 提交于
      This reverts commit f6db31ec.
      
      Reason:
      Scope names can very easily conflict, particularly when sharing Concerns
      within the team, or using multiple gems that extend AR models.
      
      It is true that Ruby has the ability to detect this with the -w option, but the
      reality is that we are depending on too many gems that do not care about Ruby
      warnings, therefore it might not be a realistic solution to turn this switch on
      in our real-world apps.
      dc925119
  29. 14 10月, 2015 1 次提交
    • Y
      applies new doc guidelines to Active Record. · 428d47ad
      Yves Senn 提交于
      The focus of this change is to make the API more accessible.
      References to method and classes should be linked to make it easy to
      navigate around.
      
      This patch makes exzessiv use of `rdoc-ref:` to provide more readable
      docs. This makes it possible to document `ActiveRecord::Base#save` even
      though the method is within a separate module
      `ActiveRecord::Persistence`. The goal here is to bring the API closer to
      the actual code that you would write.
      
      This commit only deals with Active Record. The other gems will be
      updated accordingly but in different commits. The pass through Active
      Record is not completely finished yet. A follow up commit will change
      the spots I haven't yet had the time to update.
      
      /cc @fxn
      428d47ad
  30. 08 10月, 2015 1 次提交
    • T
      Modify the scope method documentation · e2a42243
      Tommaso Visconti 提交于
      Adds a paragraph to the documentation of the `ActiveRecord::Scoping::Named.scope` method,
      explaining that the method is intended to return an ActiveRecord::Relation object to be
      composable with other scopes.
      
      In the case that in the case that `nil` or `false` are returned, the method returns
      an `all` relation instead.
      This unexpected behaviour is mentioned in #19249 #14256 #21465 and #21882 and wasn't
      documented at all. This commit adds this documentation.
      e2a42243
  31. 12 3月, 2015 1 次提交
    • B
      Isolate access to .default_scopes in ActiveRecord::Scoping::Default · c1deb81c
      Ben Woosley 提交于
      Instead use .scope_attributes? consistently in ActiveRecord to check whether
      there are attributes currently associated with the scope.
      
      Move the implementation of .scope_attributes? and .scope_attributes to
      ActiveRecord::Scoping because they don't particularly have to do specifically
      with Named scopes and their only dependency, in the case of
      .scope_attributes?, and only caller, in the case of .scope_attributes is
      contained in Scoping.
      c1deb81c
  32. 12 2月, 2015 1 次提交
    • S
      `current_scope` shouldn't pollute sibling STI classes · 5e0b555b
      Sean Griffin 提交于
      It looks like the only reason `current_scope` was thread local on
      `base_class` instead of `self` is to ensure that when we call a named
      scope created with a proc on the parent class, it correctly uses the
      default scope of the subclass. The reason this wasn't happening was
      because the proc captured `self` as the parent class, and we're not
      actually defining a real method. Using `instance_exec` fixes the
      problem.
      
      Fixes #18806
      5e0b555b
  33. 07 2月, 2015 1 次提交
  34. 12 11月, 2014 1 次提交
  35. 24 10月, 2014 1 次提交
  36. 21 5月, 2014 1 次提交
  37. 24 4月, 2014 1 次提交
    • J
      Fixes Issue #13466. · 9c3afdc3
      Jefferson Lai 提交于
      Changed the call to a scope block to be evaluated with instance_eval.
      The result is that ScopeRegistry can use the actual class instead of base_class when
      caching scopes so queries made by classes with a common ancestor won't leak scopes.
      9c3afdc3
  38. 30 1月, 2014 1 次提交
    • G
      `scope` now raises on "dangerous" name conflicts · 7e8e91c4
      Godfrey Chan 提交于
      Similar to dangerous attribute methods, a scope name conflict is
      dangerous if it conflicts with an existing class method defined within
      `ActiveRecord::Base` but not its ancestors.
      
      See also #13389.
      
      *Godfrey Chan*, *Philippe Creux*
      7e8e91c4
  39. 06 8月, 2013 1 次提交