2012-11-22 55 views
1

我有一個數組Pictures。每張圖片has_many評論。從對象數組中獲取關聯數組?

如果我有一組圖片@pictures,我如何從@pictures中的所有圖片中獲得具有某個屬性的所有註釋?有一個漂亮的紅寶石一個襯爲下面的代碼?:

@comments = [] 
@pictures.each do |pic| 
    pic.comments.each do |comment| 
    if comment.text == "test" 
     @comments << comment 
    end 
    end 
end 

注:我知道,我也許可以從數據庫查詢一行得到這個,但我想這將是更有效地使用數據我已經有了,而不是重新查詢所有圖片的數據庫,當我只關心我已經有的圖片的某個子集時。

回答

5
@comments = 
@pictures 
.flat_map(&:comments) 
.select{|comment| comment.text == "test"} 
+1

我永遠愛Ruby和Rails如何讓一切容易... –

1

map + select應該做的伎倆:

@comments = @pictures.map(&:comments).flatten.select{|c| c.text == "test"}