Raisl 4 - attr_encrypted: как расшифровать значения с помощью выбора по зашифрованным значениям
Мы шифруем значения в таблице / модели - RegisteredDomain, используя attr_encrypted ниже
attr_encrypted :domain_name, :registered_by, :api_key, :key => "65xU4TdZntTV53"
Значения также шифруются и сохраняются в БД. Ниже код сохраняет значения в БД.
registereddomain = RegisteredDomain.new(
:domain_name => domain_name,
:api_key => api_key,
:hash_key => hash_key,
:registered_by => ep_id,
:status => status,
:domain_type_id => domain_type_id
)
registereddomain.save
Проблема с расшифровкой значений с помощью выбора ниже. Мы получаем зашифрованные значения здесь, может кто-нибудь сказать, как получить расшифрованные значения в листинге.
def select_all
@registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
return @registered_domains
end
2 ответа
Вероятно, есть причина хранить значения в базе данных в зашифрованном режиме. Следовательно, если вы хотите расшифровать значение, просто вызовите соответствующий метод для метода экземпляра:
@registered_domains = RegisteredDomain.select("id, encrypted_domain_name, domain_type_id, encrypted_api_key, status").order(updated_at: :desc)
@registered_domains.first.domain_name
редактировать
Вы хотите создать пользовательский метод для извлечения значений из базы данных:
def self.all_decrypted(columns)
all.map do |record|
columns.map do |column|
record.send(column.to_sym)
end
end
end
RegisteredDomain.all_decrypted ([: имя_домена,:api_key]). Это вернет вам массив массивов, фактические значения domain_name
, api_key
,
Было бы хорошо, если бы вы могли предоставить свой пример кода для контроллера и просмотра. Как я вижу, вы напрямую используете поля без attribute
вариант; так что в вашей базе данных поле domain_name
должны быть представлены как encrypted_domain_name
, Так что здесь в вашем запросе выбора вы можете попытаться изменить свой атрибут encrypted_domain_name
в domain_name
, Также вы должны изменить его там, где вы хотите получить зашифрованный атрибут.
(Я не могу написать полный кодовый блок должным образом, поэтому я попытался объяснить это вкратце; но простое переименование атрибута должно работать!)