Rails:如何统计用户数量?

时间:2012-10-17 04:53:12

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

这是我的模特。

用户 UNIT_ID

单元 BLOCK_ID

阻止 postalcode_id

邮编 neighbourhood_id

名称

所有人的关系都属于最底层

这是我当前的index.html.erb文件,我希望输出每个社区的用户数。

<% provide(:title, 'Neighbourhoods') %>
<ul class="thumbnails">
    <% @neighbourhoods.each do |neighbourhood| %>
    <li class="span3">
        <div class="thumbnail">
            <div style="position:relative;">
                <%= link_to "Join", '#', class: "btn-join" %>
                <%= image_tag(neighbourhood.name+".jpg", alt: neighbourhood.name) %>
            </div>
            <h2 style="margin-bottom:0px"><%= neighbourhood.name.titleize %></h2>
            <% neighbourhood.postalcodes.each do |postalcode| %>
            <%= postalcode.blocks.map(&:block).join(", ") %>
            <% end %>
            <br>
            <%= neighbourhood.streetname.titleize %>
        </div>
    </li>
    <% end %>
</ul>

提前致谢。

2 个答案:

答案 0 :(得分:0)

假设一个邻居has_many用户:

<%= neighbourhood.users.size %>

请注意,计数是一个相对较慢的选项,因此您可以选择使用counter_cache缓存用户的速度:

class User < ActiveRecord::Base
  belongs_to :neighborhood, :counter_cache => true
end

然后在迁移中:

add_column :neighborhoods, :users_count, :integer, :default => 0

答案 1 :(得分:0)

似乎是一组非常深层嵌套的关联。您可能需要再次查看模型,看看是否可以“减少”一些。也许就像只有一个用户和单位模型,然后添加块,邮政编码和邻居到单位,你可以做Unit.block和Unit.postal_code ...等。

对于您当前的配置(假设has_many / belongs_to的正确关联),您应该可以执行以下操作:

Neighbourhood.postal_code.block.unit.users.count
祝你好运!