暂时将数据存储在记录中以减少查询冗余

时间:2016-04-02 17:05:58

标签: ruby-on-rails ruby

下面的示例显示了冗余,因为数据库被查询两次完全相同的事情。

.div1
    - towns.each do |town|
        = town.name
        - town.residents.where(:age => 14).each do |r|
            %p= r.name

.div2
    - towns.each do |town|
        = town.name
        - town.residents.where(:age => 14).each do |r|
            %p= r.name

无论如何我可以简化这个吗?

2 个答案:

答案 0 :(得分:1)

实际上Rails应该缓存查询。它不会向数据库触发两次。

答案 1 :(得分:0)

您可以通过包含或预加载关系对象来优化查询。

516
16
8
512, 516
1: 448
2: 464
3: 480
4: 496

这将提前选择城镇的居民记录

如果您只是寻找14岁以下居民的城镇

towns = towns.preload(:residents)