2012-06-20 56 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

接受的答覆。謝謝。 –