对ActiveRecord Association集合对象的查询

时间:2012-06-20 14:08:02

标签: ruby ruby-on-rails-3

我有一组从表中获取的行。让我们说对象评级。获取此对象后,我说数据库中有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集合对象?

1 个答案:

答案 0 :(得分: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将嵌入式数组展平为单个级别数组countlength或{ {1}}表示元素数量,size是我倾向于使用的其他元素。

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

join