我正在努力解决Rails 5.2.4.1应用程序的问题。配置如下:
- Ruby 2.6.5
- 轨道5.2.4.1
- attr_encrypted 3.1.0
我有一个名为Chicken的模型,它有两个属性:name
-是attr_encrypted,number
-是一个普通整数字段。每当我执行查询以检索除attr_encrypted字段之外的任何其他字段时,它仍然会附加到结果中,并且总是nil
:
Chicken.select(:number) => #<ActiveRecord::Relation [#<Chicken id: nil, number: nil, name: nil>]>
请记住,这只是一个测试应用程序,我试图在最初遇到这种情况的实际应用程序上执行的查询更为复杂。
有没有办法防止attr_encrypted将加密字段附加到查询结果?由于当前的结果意味着我必须重新编写应用程序中所有现有的查询,或者以某种方式为这些类型的字段添加一个过滤器
此问题是由attr_encrypted
的更改引起的。据我所知,在不修改库的情况下,没有任何简单的方法可以删除这个属性,但没有人主动处理它,所以这似乎不太可能。
据我所见,唯一的选择是:
- 使用其他库
- 覆盖模型
attributes
方法以排除该值(可能会产生不希望的结果(。它仍将显示在活动记录提供的其他方法中 - 处理它
- 其他我找不到的东西
处理它的几种方法:
- 使用库为前端生成JSON响应,以仅包含您想要的属性
- 像design一样重新定义serializablehash来删除属性。(这比重新定义
attributes
方法本身要安全得多