我正在构建一个需要 HIPAA 合规性的应用程序,切入正题,这意味着我不能允许在数据库中自由查看某些连接(患者和对他们的建议)。
这些表通过patients_recommendations
我的应用程序中的表连接,在我通过attr_encrypted添加加密之前效果很好。为了减少加密和解密的数量(以及相关的开销),我希望能够简单地加密表patient_id
中的patients_recommendations
数据。但是,在将数据类型更改为string
并将列名更改为encrypted_patient_id
时,当我尝试重新设置数据库时,应用程序会中断并出现以下错误:
无法写入未知属性“患者 ID”
我认为这是因为连接是直接查找列而不是通过模型(有道理,使用模型可能更慢)。有什么方法可以让 Rails 通过模型(在哪里attr_encrypted
添加了必要的辅助方法)?
更新:
为了找到解决方法,我尝试向模型添加 before_save ,如下所示:
before_save :encrypt_patient_id
...
private
def encrypt_patient_id
self.encrypted_patient_id = PatientRecommendation.encrypt(:patient_id, self.patient_id)
self.patient_id = nil
end
但是,这也不起作用,导致相同的错误unknown attribute
。两种解决方案都对我有用(尽管第一个解决方案可以解决主要问题),有什么想法为什么before_save
在通过关联创建时没有被调用?