Rails SQL查询在未询问时计算结果

时间:2016-08-23 16:40:02

标签: sql ruby-on-rails activerecord

这个rails / sql代码......

@new_relationships = User.select('*')
                         .from("(#{@rels_unordered.to_sql}) AS rels_unordered")
                         .joins("
                    INNER JOIN  relationships
                    ON          rels_unordered.id = relationships.character_id
                    ORDER BY    relationships.created_at DESC
                    ")

生成一个如下所示的查询:

SELECT COUNT(*) FROM (SELECT .....

为什么要统计记录?我没有要求计数。我只是想在连接后选择所有列:

SELECT * FROM (SELECT .....

修改

好的,看起来这种情况正在发生,因为我对@new_relationships做的第一件事就是

@new_relationships.any?

因为查询是懒惰地执行的,所以.any?正在影响查询!我本以为rails会执行查询,将所有记录都记录到@new_relationships中,然后计算它们。这是一个令人惊讶的功能。那么如何防止.any?影响查询?换句话说,如何让查询按预期运行,然后计算结果呢?

1 个答案:

答案 0 :(得分:0)

您可以对关系的dup进行测试,以便它是一个单独的关系对象,由any?修改而不是原始关系对象。

@new_relationships.dup.any?