2012-06-20 46 views
0

我有一组我从表中提取的行。我们说对象评级。获取这个对象之后,我从数据库中说出了100个条目。关于ActiveRecord关联集合对象的查询

的评级对象可能是这样的:

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的方法或宝石,它会给我一个类似的ActiveRecord关联集合对象的查询API?

回答

2

Rating.all返回一个包含所有Rating对象的数组。从那里开始,您将重点转移到从阵列中选择和映射。例如:

@perfect_ratings = r.select{|x| x.a == 100} 

参见:

http://www.ruby-doc.org/core-1.9.3/Array.html

附加注释:

去在对数组可用的方法列表中,我发现经常使用以下自己:

检查变量aga研究所多个值:

%w[dog cat llama].include? @pet_type # returns true if @pet_type == 'cat' 

要创建另一个阵列(地图和收集是别名):

%w[dog cat llama].map(|pet| pet.capitalize) # ["Dog", "Cat", "Llama"] 

排序和下降重复:

%w[dog cat llama dog].sort.uniq # ["cat", "dog", "llama"] 

<<添加元素,+添加阵列,flatten将嵌入式阵列平铺到单个级别阵列中,countlengthsize元素的数量,而join是我倾向于使用很多的其他元素。

最后,这里是join一个例子:

%w[dog cat llama].join(' or ') # "dog or cat or llama" 
+0

谢谢你给了我一个很好的起点。 –

+0

select是我所需要的完美方法。有没有其他的数组方法,你发现自己使用了很多?我没有时间研究整个阵列文档,但我想研究一些重要的方法。 –

+0

接受的答复。谢谢。 –