2012-09-19 26 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>] 
} 

然后你就可以通过哈希迭代和统计数组大小