莫因,
我偶然发现了ActiveRecord的不一致.
我试图在大表的两列中获取所有使用的值组合.第一个想法:
SELECT DISTINCT col1, col2 FROM table
Run Code Online (Sandbox Code Playgroud)
想象一下一个rails应用程序,它将餐饮组织为一个模型,每个Meal has_many :noodles
Each Noodle都有属性(因此DB表列)color
和shape
.我的目标是让所有当前组合的数量color
和shape
单个餐.
由于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个对象但是计算所有数据库线?
蒂姆,谢谢和最诚挚的问候