此问题通常是由于使用了attr_encrypted gem的default_options选项时导致的。默认情况下,它没有使用数据库的默认值,而是使用nil。因此,当模型在没有设置密钥值的情况下保存时,它会将null值写入数据库。
要解决这个问题,我们可以使用default_options与数据库中的默认值相同,这样当密钥为空时它就会使用默认值。示例代码如下:
class User < ActiveRecord::Base
attr_encrypted :ssn, key: Rails.application.secrets.secret_key_base, default_options: { iv: 'random_iv', mode: :per_attribute_iv, algorithm: 'aes-256-cbc', encode: true, default_value: nil }
end
在这个例子里,我们将default_value选项设置为nil以在保存时使用数据库的默认值。