В Rails 6 / FactoryBot 6, как мне имитировать атрибуты attr_encrypted?

#ruby-on-rails #factory-bot #ruby-on-rails-6 #attr-encrypted

#рубин на рельсах #завод-бот #рубин на рельсах-6 #attr-зашифровано

Вопрос:

Недавно обновлен до Rails 6 и FactoryBot 6.2.0. У меня есть эта модель

 class Store lt; ApplicationRecord   …  attr_encrypted :ein_number,  key: APP_CONFIG[:app_encryption][::Rails.env][‘secret_key’]  

У меня есть соответствующая фабрика

 FactoryBot.define do  factory :store do  name { "Test Store” }  …  ein_number { "00-0000000" }  

Но теперь, когда я иду и создаю экземпляр этой фабрики, я получаю ошибку

 Failure/Error: @store = create :store    NoMethodError:  undefined method `encrypted_ein_number_iv' for #lt;Store:0x00007feec319fbe0gt;  

Не уверен, что изменилось в Rails или FactoryBot, но раньше это работало без моего определения такого метода. В любом случае, это похоже на взлом. Есть ли более элегантный способ определить этот атрибут на фабрике?

Ответ №1:

Любопытно, что обновление моего attr_encryptor на моей модели до

 attr_encrypted :ein_number,  key: APP_CONFIG[:cfs_encryption][::Rails.env]['secret_key'],  algorithm: 'aes-256-cbc', mode: :single_iv_and_salt, insecure_mode: true  

решена проблема (фабрика создала экземпляр объекта в обычном режиме).