小编bun*_*ter的帖子

Rails 3:Relation.count和Relation.all.count之间的区别

莫因,

我偶然发现了ActiveRecord的不一致.
我试图在大表的两列中获取所有使用的值组合.第一个想法:

SELECT DISTINCT col1, col2 FROM table
Run Code Online (Sandbox Code Playgroud)

想象一下一个rails应用程序,它将餐饮组织为一个模型,每个Meal has_many :noodles Each Noodle都有属性(因此DB表列)colorshape.我的目标是让所有当前组合的数量colorshape单个餐.

由于AR不提供我使用的"不同"方法

my_meal.noodles.select("distinct color, shape")
Run Code Online (Sandbox Code Playgroud)

得到(在rails console stdout中)一个6行输出的8个Noodle对象(分别是它们的String表示).但:

>> my_meal.noodles.select("distinct color, shape").count
=> 1606
Run Code Online (Sandbox Code Playgroud)

实际上my_meal包含1606面条.如果我将关系转换为数组并获取它的大小或使用.all.count结果是正确的.

所以我的问题是,为什么AR输出8个对象但是计算所有数据库线?

这里似乎提到了类似的问题,但没有给出答案.

蒂姆,谢谢和最诚挚的问候

activerecord ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
4927
查看次数