2012-09-19 54 views
-1

可能重複:
rails count double entriesRails的標記多個結果

<% @users.each do |user| %> 
<li><%= user.user_id %><%= user.user.name %></li> 

查詢結果讓我

• 1 fred 
• 1 fred 
• 9 charlie 

結果可能是10個不同的用戶和/或一些可能是雙倍或三倍的結果。我想標記他們出現multipe時。 如何找到用戶中哪個user_id的size/count> = 2是最好的方法? 要說清楚:我不想在我的模型中找到雙重條目,但在結果中。

解決方案:

<% @users.each do |user| %> 
<li class="<%= mark_it(@users, user.user_id) %>"><%= user.user_id %><%= user.user.name %></li> 

幫手

def mark_it(users,id) 
    user_counts = Hash.new(0) 
    users.each {|user| user_counts[user.user.id] += 1} 
    ordered_results = user_counts.sort_by{|user| -user_counts[user]} 
    most_appearances = ordered_results.take_while {|user, count| count >= 2} 
    top_users = most_appearances.map {|user, count| user} 
    return 'make_bold' if top_users == [id] 
    end 
+0

@Yule:問題是不清楚的,所以答案是不恰當。 – Werner

+0

@WernerLaude如果問題不清楚,但你仍然試圖解決同樣的問題,編輯您的原始問題 – Yule

+0

嗨尤爾..我已經嘗試過,但...然後沒有人再看它了..我找到了幫助和在這裏發佈結果.. – Werner

回答

0

不能說這個問題已經變得更加清晰的,但是......例如,你可以做這樣的事情:

users_grouped = @users.group_by {|user| user.user_id} 

這將產生散列,其中鍵是用戶ID,值是具有該ID的用戶對象的數組,即

{ 
1 => [<User...,name=fred>, <User...,name=fred>], 
9 => [<User...,name=charlie>] 
} 

然後你就可以通過哈希迭代和統計數組大小