Search code examples
ruby-on-railsruby-on-rails-3ruby-on-rails-3.2ruby-on-rails-3.1

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

Solution

  • 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>