Я использую attr_encrypted и хочу получать отформатированный атрибут всякий раз, когда я получаю доступ к зашифрованному атрибуту - есть ли способ сделать это?
Модель:
class User < ApplicationRecord
attr_encrypted :balance, key: 'some super secret key', marshal: true
end
И я хочу иметь возможность получить доступ к балансу и получить Money
объект: Money.new(balance, currency)
Есть ли возможность заставить user.balance
вернуть это сразу (без дополнительных методов, таких как user.balance_to_money
?
Я пытался как-то «расширить» поведение attr_encrypted
(определенные методы получения атрибутов), но я не уверен, как этого добиться.
Я пытался использовать пользовательский объект Marshal
, но он выигралне работает, так как мне нужно получить доступ к валюте пользователя из базы данных (у Marshaler этого не будет)
attr_encrypted :balance, key: 'some super secret key', marshal: true, marshaler: BalanceMarshaler
module BalanceMarshaler
extend self
def dump(data)
data.to_s
end
def load(data)
number = Marshal.load(data)
Money.new(number, currency)
end
end