Ruby on rails 即使未请求,Select查询也会在结果中添加attr_加密属性

Ruby on rails 即使未请求,Select查询也会在结果中添加attr_加密属性,ruby-on-rails,attr-encrypted,Ruby On Rails,Attr Encrypted,我正在努力解决Rails 5.2.4.1应用程序的问题。 配置如下所示: Ruby 2.6.5 轨道5.2.4.1 attr_加密3.1.0 我有一个名为Chicken的模型,它有两个属性:name(是attr_加密的)和number(是一个普通的整数字段)。每当我执行查询以检索除attr_加密字段以外的任何其他字段时,该字段仍会附加到结果,并且始终为零: 鸡。选择:数字=> 请记住,这只是一个测试应用程序,我试图在最初遇到这种情况的实际应用程序上执行的查询更为复杂 有没有办法防止attr_en

我正在努力解决Rails 5.2.4.1应用程序的问题。 配置如下所示:

Ruby 2.6.5 轨道5.2.4.1 attr_加密3.1.0 我有一个名为Chicken的模型,它有两个属性:name(是attr_加密的)和number(是一个普通的整数字段)。每当我执行查询以检索除attr_加密字段以外的任何其他字段时,该字段仍会附加到结果,并且始终为零:

鸡。选择:数字=>

请记住,这只是一个测试应用程序,我试图在最初遇到这种情况的实际应用程序上执行的查询更为复杂


有没有办法防止attr_encrypted将加密字段附加到查询结果?由于当前的结果意味着我必须重新写入应用程序中的所有现有查询,或者以某种方式为这些类型的字段添加一个过滤器

这个问题是由attr_加密引起的。据我所知,没有任何简单的方法可以在不修改库的情况下删除此属性,但没有人积极处理它,因此这似乎不太可能

就我所知,唯一的选择是:

使用其他库 重写models attributes方法以排除该值可能会产生不需要的结果。它仍将在active record提供的其他方法中显示。 处理它 我还没找到别的东西 您可以通过以下几种方式处理此问题:

使用库为前端生成JSON响应,以仅包含所需的属性 就像Desive删除属性一样。比重新定义attributes方法本身安全得多。
此问题是由加密属性导致的。据我所知,没有任何简单的方法可以在不修改库的情况下删除此属性,但没有人积极处理它,因此这似乎不太可能

就我所知,唯一的选择是:

使用其他库 重写models attributes方法以排除该值可能会产生不需要的结果。它仍将在active record提供的其他方法中显示。 处理它 我还没找到别的东西 您可以通过以下几种方式处理此问题:

使用库为前端生成JSON响应,以仅包含所需的属性 就像Desive删除属性一样。比重新定义attributes方法本身安全得多。
attr_encrypted是否会干扰此处的查询,或者它是否会按照预期在SELECT FICKS.number FROM FICKS的行上创建内容?这可能是因为它实际上没有给结果附加任何东西。你所看到的只是当你检查一个模型时发生的事情——它显示了所有的属性,即使它们没有水合——比如看id。ActiveRecord通过读取数据库模式在类级别创建属性——它们不是根据数据库查询的结果动态创建的。如果您只想使用该列,请使用pulk或任何返回原始结果而不是模型的方法。如果我直接使用原始SQL查询并执行它,则不会向结果附加额外信息。如果我使用ActiveRecord选择方法,则是,该字段将附加到结果。如果我只需要该列,我会使用Pulk,但实际上,我需要执行更复杂的查询,并且我希望能够继续使用ActiveRecord处理程序使它们正常工作。所有这些都是在Ruby和Rails升级之后开始的。在Ruby 2.2.2和Rails 5.0.0上,这个问题是不可复制的。您能创建一个实际复制这个问题的示例吗?正如我前面所解释的,检查模型的输出没有显示任何关于SQL查询的信息,我的实际应用程序非常复杂,没有告诉我们发生了什么。attr_加密是否会干扰这里的查询,或者它只是在SELECT CHICKS.number from CHICKS的行上创建了一些东西?这可能是因为它实际上没有给结果附加任何东西。你所看到的只是当你检查一个模型时发生的事情——它显示了所有的属性,即使它们没有水合——比如看id。ActiveRecord通过读取数据库模式在类级别创建属性——它们不是根据数据库查询的结果动态创建的。如果您只想使用该列,请使用pulk或任何返回原始结果而不是模型的方法。如果我直接使用原始SQL查询并执行它,则不会向结果附加额外信息。如果我使用ActiveRecord选择方法,则是,该字段将附加到结果。如果我只需要该列,我会使用Pulk,但实际上,我需要执行更复杂的查询,并且我希望能够继续使用ActiveRecord处理程序使它们正常工作。所有这些都是在Ruby和Rails升级之后开始的。在Ruby 2.2.2和Rails 5.0.0上,这个问题没有得到解决
你能创造一个真实再现问题的例子吗?正如我前面所解释的,检查模型的输出没有显示任何关于SQL查询的信息,而我的实际应用程序非常复杂,没有告诉我们发生了什么。