我有一组从表中获取的行。让我们说对象评级。获取此对象后,我说数据库中有100个条目。
评级对象可能如下所示:
table_ratings
t.integer :num
所以我现在要做的是对这100行执行一些计算而不执行任何其他查询。我可以这样做,运行一个额外的查询:
r = Rating.all
good = r.where('num = 2') # this runs an additional query
"#{good}/#{r.length}"
这是我想要做的非常粗略的想法,我还有其他更复杂的输出要构建。让我们想象一下,我需要在这些行上执行超过10种不同的计算,因此在sql查询中对这些进行别名可能不是最好的选择。
什么是替换上面的r.where查询的有效方法?是否有一个Ruby方法或gem可以给我一个类似的查询API到ActiveRecord Association集合对象?
答案 0 :(得分:2)
Rating.all返回所有Rating对象的数组。从那里,将焦点转移到从阵列中选择和映射。例如:
@perfect_ratings = r.select{|x| x.a == 100}
请参阅:
其他评论:
查看可用于数组的方法列表,我发现自己经常使用以下内容:
根据多个值检查变量:
%w[dog cat llama].include? @pet_type # returns true if @pet_type == 'cat'
创建另一个数组(map和collect是别名):
%w[dog cat llama].map(|pet| pet.capitalize) # ["Dog", "Cat", "Llama"]
要对重复项进行排序和删除:
%w[dog cat llama dog].sort.uniq # ["cat", "dog", "llama"]
<<
添加元素+
以添加数组,flatten
将嵌入式数组展平为单个级别数组count
或length
或{ {1}}表示元素数量,size
是我倾向于使用的其他元素。
最后,这是join
的一个例子:
join