首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何匿名化更多的只读属性

如何匿名化更多的只读属性
EN

Stack Overflow用户
提问于 2021-02-08 08:00:17
回答 2查看 82关注 0票数 0

我目前的情况是,我有一个具有只读属性的模型,并且由于GDPR,我试图匿名化这些属性(意思是用无法识别的值更新它们)。Rails似乎不允许这样做(即使是通过覆盖#readonly?并返回false ),这是有意义的,因为为什么要更新不应该更新的属性,对吗?但有没有人有过类似的案子?如果是的话,请你去做吗?

模型

代码语言:javascript
复制
class Medium < ApplicationRecord
  include Anonymous::ActiveRecord

  attr_readonly :access_id, :medium_reference_id

  def anonymize
    if self.class.readonly_attributes.include?("access_id") #useless because always true
      Medium.where(id: self.id).update_all(access_id: "#{self.id}_anonymized")
    end
    super
  end

  private
  
  def anonymization_definitions
    {
      access_id: "#{self.id}_anonymized",
      vehicle: "#{self.id}_anonymized",
    }
  end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-09 14:18:11

你可以在数据库级别上这样做。使用connection.execute

代码语言:javascript
复制
random_id = SecureRandom.hex(9)
sql = <<~SQL
  UPDATE mediums
  SET access_id = #{random_id}
  WHERE id = #{self.id};
SQL

ActiveRecord::Base.connection.execute(sql)

这将更新有关的记录,绕过readonly属性。您可以将其放在中介模型上的实例方法中。

代码语言:javascript
复制
# app/models/medium.rb
def annonymize
  # Statement from above
end

然后可以被调用为

代码语言:javascript
复制
medium = Medium.find(<ID>)
medium.annonymize
票数 1
EN

Stack Overflow用户

发布于 2021-02-09 07:25:34

最后我用了下面这一行。可能不是最好的,因为我想更新一条记录,但它不检查只读属性和工作目前。

代码语言:javascript
复制
Medium.where(id: self.id).update_all(access_id: "#{self.id}_anonymized")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66097778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档