Spec-Zone.ru › Ruby on Rails 6.0

класс ActiveRecord::QueryMethods::WhereChain

Родитель:
Объект

WhereChain объекты служат заглушками для запросов, в которых у where нет параметров. В этом случае where необходимо цеплять с not, чтобы получить новое отношение.

Публичные методы класса

new(scope) Показать исходный код
# File activerecord/lib/active_record/relation/query_methods.rb, line 20
def initialize(scope)
  @scope = scope
end

Публичные методы экземпляра

not(opts, *rest) Показать исходный код
# File activerecord/lib/active_record/relation/query_methods.rb, line 44
      def not(opts, *rest)
        opts = sanitize_forbidden_attributes(opts)

        where_clause = @scope.send(:where_clause_factory).build(opts, rest)

        @scope.references!(PredicateBuilder.references(opts)) if Hash === opts

        if not_behaves_as_nor?(opts)
          ActiveSupport::Deprecation.warn(<<~MSG.squish)
            NOT conditions will no longer behave as NOR in Rails 6.1.
            To continue using NOR conditions, NOT each conditions manually
            (`#{ opts.keys.map { |key| ".where.not(#{key.inspect} => ...)" }.join }`).
          MSG
          @scope.where_clause += where_clause.invert(:nor)
        else
          @scope.where_clause += where_clause.invert
        end

        @scope
      end

Возвращает новое отношение, выражающее условие WHERE + NOT в соответствии с условиями в аргументах.

not принимает условия в виде строки, массива или хэша. Подробнее о каждом формате см. ActiveRecord::QueryMethods#where.

User.where.not("name = 'Jon'")
# SELECT * FROM users WHERE NOT (name = 'Jon')

User.where.not(["name = ?", "Jon"])
# SELECT * FROM users WHERE NOT (name = 'Jon')

User.where.not(name: "Jon")
# SELECT * FROM users WHERE name != 'Jon'

User.where.not(name: nil)
# SELECT * FROM users WHERE name IS NOT NULL

User.where.not(name: %w(Ko1 Nobu))
# SELECT * FROM users WHERE name NOT IN ('Ko1', 'Nobu')

© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API