Spec-Zone.ru › Ruby on Rails 7.1

модуль ActiveRecord::Encryption::ExtendedDeterministicQueries

Автоматически расширяет зашифрованные аргументы для поддержки запросов к зашифрованным и незашифрованным данным

Active Record Encryption поддерживает запросы к базе данных с использованием детерминированных атрибутов. Например:

Contact.find_by(email_address: "jorge@hey.com")

Значение “jorge@hey.com” будет автоматически зашифровано для выполнения запроса. Но есть проблема при шифровании данных. Это не сработает. В это время эти запросы должны быть:

Contact.find_by(email_address: [ "jorge@hey.com", "<encrypted jorge@hey.com>" ])

Этот модуль исправляет ActiveRecord, чтобы автоматически поддерживать это. Он решает обе проблемы:

  • ActiveRecord::Base - Используется в Contact.find_by_email_address(...)

  • ActiveRecord::Relation - Используется в Contact.internal.find_by_email_address(...)

Этот модуль включается, если ‘config.active_record.encryption.extend_queries` имеет значение `true`.

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

install_support() Показать исходный код
# File activerecord/lib/active_record/encryption/extended_deterministic_queries.rb, line 24
def self.install_support
  # ActiveRecord::Base relies on ActiveRecord::Relation (ActiveRecord::QueryMethods) but it does
  # some prepared statements caching. That's why we need to intercept +ActiveRecord::Base+ as soon
  # as it's invoked (so that the proper prepared statement is cached).
  ActiveRecord::Relation.prepend(RelationQueries)
  ActiveRecord::Base.include(CoreQueries)
  ActiveRecord::Encryption::EncryptedAttributeType.prepend(ExtendedEncryptableType)
end

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

Spec-Zone.ru

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