модуль 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`.
Публичные методы класса
# 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.