0

我有一组从表中获取的行。让我们说对象评级。获取这个对象后,我说数据库中有 100 个条目。

Rating 对象可能如下所示:

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 关联集合对象?

4

1 回答 1

2

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

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

看:

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

补充评论:

查看可用于数组的方法列表,我发现自己经常使用以下方法:

对照多个值检查一个变量:

%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其他我经常使用的东西。sizejoin

最后,这是一个例子join

%w[dog cat llama].join(' or ')  # "dog or cat or llama"
于 2012-06-20T14:20:57.010 回答