途中から attr_encrypted を導入したら配列アクセス演算子でアクセスできなくて困った。

途中から attr_encrypted を導入したら配列アクセス演算子でアクセスできなくて困った。

最近はドット演算子で attribute を参照する統一をしているので問題ないのですが、初期に書いたのは配列アクセス演算子 [] を結構使っていて難儀しました。

もともとはworker[:name]つう感じで生で扱われてました。

  attr_encrypted :name, key: 'a secret key', attribute: 'name_encrypted'

これだけだとこうなる

pry(main)> worker.name
=> "お名前"
pry(main)> worker[:name]
=> nil

のでこんな感じのを加えて難をしのぎました。

  def [](index)
    case index
      when :name, 'name'
        self.name
      else
        super
    end
  end


  def []=(index, val)
    case index
      when :name, 'name'
        self.name = val
      else
        super
    end
  end

そういや find_by したいとき用に find_by_name は用意してくれたんだけど find_all_by_name なかったんで where(name_encryped: encrypt_name('探したい名前')) でどうにかこうにか。