使用where和count计算对象中的出现次数

时间:2014-05-30 13:41:54

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1

我正在使用includes将结果保存在变量中。

@users = User.where(:id => Issue.select(:author_id).map(&:author_id))
@release_users = ReleaseUser.includes(@users).order('user_id')

ReleaseUser表中,我有一些字段:iduser_idrelease_id ....

我需要在视图中进行一些计算。

示例:

<%= @release_users.find { |release_user| release_user.id == 2 }.user_id %>

现在,我需要为每个用户计算此表中的出现次数。

我试过了:

<%= @release_users.where(:user_id => 1).count %>
<%= @release_users.where(user_id => 1).count %>

但我不能,对不起我的英语。

由于

- UPDATE-- 结果:

<% @release_users.each do |release_user| %>
  user_id: <%= release_user.user_id %>
  release_id: <%= release_user.release_id %>
  <br>
<% end %>

user_id:85 release_id:1 user_id:66 release_id:1 user_id:94 release_id:1 user_id:254 release_id:1 user_id:52 release_id:1 user_id:263 release_id:2 user_id:90 release_id:2 user_id:73 release_id:2 user_id:56 release_id:2 user_id:43 release_id:2 user_id:196 release_id:2 user_id:183 release_id:2

更新02 - 错误消息

ActiveRecord::ConfigurationError in User_reports#index

Showing    /var/www/base2_crowdtest/relatorios/ultimo/trunk/app/views/user_reports/_second_tab.html.erb where line #28 raised:

 #<User id: 2, contact_id: 2, system_role_id: 1, system_idiom_id: 1, status_id: 2, company_id: nil, username: "jose.mario", email: "", opt_in: nil, password_hash: "", password_salt: "", auth_token: "", oauth_token: nil, oauth_expires_at: nil, provider: nil, uid: nil, password_reset_token: nil, password_reset_sent_at: nil, last_login_at: "2014-02-28 18:13:47", created_at: "2012-03-02 21:43:08", updated_at: "2014-02-28 18:13:47">
Extracted source (around line #28):

25: 
26: <%= @release_users.group(:user_id).count %>
27: 
28: 
29: 
30: <div id="details" class="active display-fields">
31: 

更新03 - 发布用户模型

class ReleaseUser < ActiveRecord::Base

  belongs_to :release, touch: true # para invalidar o cache de contagem de testadores
  belongs_to :user
  belongs_to :role, class_name: 'ReleaseRole'

  attr_accessible :user, :user_id, :role, :role_id
  attr_readonly :release_id, :user_id

2 个答案:

答案 0 :(得分:4)

我不确定您在最后一个代码段中尝试完成的操作,但如果您想计算每个用户,请执行以下操作:

<%= @release_users.group(:user_id).count %>

可替换地:

 <% counts = @release_users.group(:user_id).count %>

按user_id对记录进行分组,然后对每个组进行计数。在第二个示例中,您可以使用以下方法访问各个项目的计数。 counts[2]为您提供ID为2的用户的用户计数。

来源:http://guides.rubyonrails.org/active_record_querying.html

编辑:此代码段将在表格中输出每个用户的计数。尝试查看是否仍然出现配置错误。

 <table>
    <% counts = @release_users.group(:user_id).count %>
    <td>
    <% counts.each do |userid,count| %>
      <tr><%= userid %></tr>
    <% end %>
    <td>
    </table>

答案 1 :(得分:1)

@release_users.group(:user_id).count

这将为您提供一个哈希,其中user_id为键,并计为值

{1 => 2, 2 => 4}