2017-05-25 61 views
0

的Rails計數實例的數目的鍵/值對在陣列顯示出來,並附加計數對象

def index 
 
    tag_array=[] 
 
    courses = current_user.studio.courses 
 
    courses.each do |a| 
 
     tag_array << a.age_tag.id 
 
     tag_array << a.level.id 
 
     tag_array << a.category.id 
 
     end 
 
     @tags=current_user.studio.tags 
 
     tags.each do |d| 
 
     e=tag_array.where(:id => d).count 
 
      d.store("count",e); 
 
     end 
 
      
 
    end

我正在尋找在軌道的方式來計算的次數的鍵/值對:id => d在數組中顯示,然後將其附加到每個語句中的值。 Rails持續拋出錯誤,指出.where和.store不是有效的函數。

+0

預期輸出是多少? –

回答

0

.whereactiverecord array方法,而不是簡單的數組方法.. 在你的情況,你可以..

def index 
    tag_array = current_user.studio.courses(:age_tag, :level, :category).map do |a| 
    [a.age_tag.id, a.level.id, a.category.id] 
    end.flatten 
    count_hash = current_user.studio.tags.map do |t| 
    ["count_#{t}", tag_array.count(t)] 
    end.to_h 
end 
+0

仍然會導致n + 4查詢 – max

+0

謝謝..更新! –

0

你應該能夠採摘的列:

Studio.left_joins(courses: [:age_tag, :tags, :level, :category]) 
     .where(id: current_user.studio) 
     .pluck('age_tags.id, levels.id, categories.id, COUNT(tags.*)') 

.left_joins是Rails 5中的新功能。請參閱LEFT OUTER JOIN in Rails 4 for Rails 4.

+0

也許你的看法是正確的...我仍然困惑OP是什麼期望..我只是想解決語法錯誤.. –