在Rails 6 / FactoryBot 6 中,如何模拟attr_encrypted 属性?
In Rails 6 / FactoryBot 6, how do I simulate attr_encrypted attributes?
最近升级到 Rails 6 和 FactoryBot 6.2.0。我有这个型号
class Store < 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 #<Store:0x00007feec319fbe0>
不确定 Rails 或 FactoryBot 中发生了什么变化,但在我没有定义此类方法的情况下,这之前是有效的。无论如何,这似乎有点像黑客。有没有更优雅的方法在工厂中定义这个属性?
奇怪的是,将模型上的 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
解决了问题(工厂正常创建对象实例)。
最近升级到 Rails 6 和 FactoryBot 6.2.0。我有这个型号
class Store < 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 #<Store:0x00007feec319fbe0>
不确定 Rails 或 FactoryBot 中发生了什么变化,但在我没有定义此类方法的情况下,这之前是有效的。无论如何,这似乎有点像黑客。有没有更优雅的方法在工厂中定义这个属性?
奇怪的是,将模型上的 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
解决了问题(工厂正常创建对象实例)。