Lorena Bento
Lorena Bento

Reputation: 554

Count occurences in a object using where and count

I'm using includes in saving the result in a variable.

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

In ReleaseUser table I have some fields as: id, user_id, release_id....

I need to make some calculates in a view.

Example:

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

Now, I need to count the occurrences in this table for each user.

I tried:

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

But I can't, please, sorry for my English.

Thanks

--UPDATE-- The result of:

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

is

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

UPDATE 02 - Error message

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: 

UPDATED 03 - ReleaseUser model

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

Upvotes: 0

Views: 101

Answers (2)

mkis
mkis

Reputation: 441

I'm not sure what you're trying to accomplish in that last code snippet, but if you want to count each user, do the following:

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

Alternatively:

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

This groups the records by user_id, then counts each group. In the second example, you can access individual counts of items with e.g. counts[2] giving you the user count for the user with id 2.

Source: http://guides.rubyonrails.org/active_record_querying.html

EDIT: This code snippet will output each user's count in a table. Try to see if you still get a configuration error.

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

Upvotes: 4

usha
usha

Reputation: 29349

@release_users.group(:user_id).count

This will give you a hash with user_id as key and count as value

{1 => 2, 2 => 4}

Upvotes: 1

Related Questions