Ruby Rails зашифрованный атрибут attr_encrypted формат - PullRequest
0 голосов
/ 11 мая 2018

Я использую 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

1 Ответ

0 голосов
/ 11 мая 2018

Если вам нужно сохранить метод доступа, который обрабатывает balance как конструктор Money, вы можете обойти проблему переопределения поведения и просто использовать другой столбец.

например. balance_new или что-то еще, а затем создайте метод доступа для .balance, который создает объект Money из balance_new ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...