【发布时间】:2020-09-25 08:08:16
【问题描述】:
我有一个由patients Postgres 数据库表支持的Patient 模型。它有一个属性national_id,由密码箱gem 加密,因此存储在national_id_ciphertext 列中。这个属性保存/更新很好,我可以在数据库中验证这一点。
但是当我读回这条记录时,没有包含national_id属性。
Rails 控制台:
pry(main)> p = Patient.find(8)
=> #<Patient id: 8, name: "Øyvind Hansen", address: nil, address_directions: nil, zip: "0667", city: "Oslo", phone_number: "+4712345678", email: "oyvind@test.com", created_at: "2020-09-05 19:41:55", updated_at: "2020-09-05 20:45:46", referral_id: nil>
pry(main)> p.national_id
=> "12345678912"
架构是:
create_table "patients", force: :cascade do |t|
t.string "name"
t.string "address"
t.string "zip"
t.string "city"
t.string "phone_number"
t.string "email"
t.text "national_id_ciphertext" # Saved, but not retrieved
t.bigint "referral_id"
t.index ["referral_id"], name: "index_patients_on_referral_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
密码箱加密的实现非常简单,直接来自the docs的基本示例。
class Patient < ApplicationRecord
encrypts :national_id
end
知道为什么 Lockbox 创建的 national_id 访问器不包含在可枚举模型属性中吗?
【问题讨论】:
-
national_id不是 db 列,因此未显示在基本输出中。
标签: ruby-on-rails encryption rails-activerecord ruby-on-rails-6