Rails 4 AR .select 在结果中包含 pk 字段,即使结果被分组(与 Rails 3.2 相反)

Rails 4 AR .select includes pk field in result even if result is grouped (as opposed to Rails 3.2)

提问人:Jack R-G 提问时间:9/17/2020 更新时间:9/17/2020 访问量:19

问:

我正在将我的应用程序从 Rails 3.2 迁移到 4.0,我发现许多测试中断,因为 Rails 4 在使用类似内容时在结果集中包含 PK 字段(通常是“id”):

Invoice.where(cust_id: 1234).select('sum(gross) as gross, sum(tax) as tax, sum(net) as net').to_a.first.attributes

这曾经在 3.2 中返回,但在 4.0 中它返回{'gross' => 1000.00, 'tax' => 0.00, 'net' => 1000.00}{'gross' => 1000.00, 'tax' => 0.00, 'net' => 1000.00, id => nil}

如果您正在编写测试并将实际结果与预期结果进行比较,则会出现问题,在这种情况下,id 字段会引发比较。我在任何地方都没有看到这种行为变化。有没有办法关闭这个“功能”?

Ruby-on-Rails Ruby-on-Rails-4 ActiveRecord Ruby-on-Rails-3.2

评论

0赞 hashrocket 9/17/2020
我不确定是否要关闭此“功能”,但您可以添加到查询中。希望您没有太多疑问。.except(‘id’)
0赞 Amit Patel 9/17/2020
您需要调整测试以响应 rail 中的 API 更改。有一次我不得不将大约 4K 测试用例从 2.3 迁移到 3.2。
0赞 Jack R-G 9/19/2020
这正是我所做的,hashrocket。
0赞 Jack R-G 9/19/2020
阿米特·帕特尔(Amit Patel):我承认情况确实如此。我的问题是我不是通过文档,而是通过实验发现了这一点。我搜索了文档,发现没有提到这种差异。我想知道是否有其他我没有看的文档可能会告诉我其他差异,我可以主动解决这些差异,而不是等到它们破坏测试或更糟的是,在生产中破坏我的代码。

答: 暂无答案