首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails:从数据库中获取值的计数

Rails:从数据库中获取值的计数
EN

Stack Overflow用户
提问于 2017-09-13 14:36:37
回答 2查看 1.2K关注 0票数 0

我在我的数据库中有一个名为“体验”的专栏,用户可以保存0到2年、2-5年、5-10年、10+年份的值。我的问题是如何计算这些值?我并不是想要一个总数的总和,我试图得到列中有多少个"2-5年“值,并在视图中显示给用户。

因此,在视图中,用户将看到数据库表列中名为experience的值,以及发布了多少作业,并包含这样的值。

经验:

0至2年(3)

2-5岁(15岁)

目前我正在做这件事。

代码语言:javascript
运行
复制
<%= link_to "0-2 years", filtered_jobs_path(experience: '0-2 years', num_days_past: params[:num_days_past], search: params[:search]) %>
   (<%= Job.where(experience: '0-2 years').size %>)<br />

我读到,使用大小比计数更好,因为如果数据库已经加载,size将不会再次调用数据库。我不确定我是否在以最有效的方式来做这件事,也许我应该使用计数器缓存列?

下面是我当前如何设置它的调用,尽管我使用的是.size,但数据库似乎一直在被查询

代码语言:javascript
运行
复制
   (0.1ms)  SELECT COUNT(*) FROM "jobs" WHERE "jobs"."experience" = ?  [["experience", "0-2 years"]]

   (0.1ms)  SELECT COUNT(*) FROM "jobs" WHERE "jobs"."experience" = ?  [["experience", "2-5 years"]]

   (0.1ms)  SELECT COUNT(*) FROM "jobs" WHERE "jobs"."experience" = ?  [["experience", "5-10 years"]]

   (0.1ms)  SELECT COUNT(*) FROM "jobs" WHERE "jobs"."experience" = ?  [["experience", "10+ years"]]

  Job Load (0.2ms)  SELECT  "jobs".* FROM "jobs" LIMIT ? OFFSET ?  [["LIMIT", 5], ["OFFSET", 0]]

   (0.1ms)  SELECT COUNT(*) FROM "jobs"

  CACHE (0.0ms)  SELECT COUNT(*) FROM "jobs"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-13 16:41:59

你想按经验分组,然后数一数:

代码语言:javascript
运行
复制
Job.group(:experience).count

这将返回一个散列:

代码语言:javascript
运行
复制
{
  '0-2 years' => 1,
  '10+ years' => 2,
  '2-5 years' => 1,
  '5-10 years' => 2
}

所以在你看来,你可以写这样的东西:

代码语言:javascript
运行
复制
# in controller

@exp_names = ['0-2 years', '2-5 years', '5-10 years', '10+ years']
@exp_counts = Job.group(:experience).count

# in view

<% @exp_names.each do |name| %>
  <%= link_to name, filtered_jobs_path(experience: name, num_days_past: params[:num_days_past], search: params[:search]) %>
  (<%= @exp_counts[name] %>)
  <br>
<% end %>
票数 0
EN

Stack Overflow用户

发布于 2017-09-13 14:41:28

代码语言:javascript
运行
复制
Job.group(:experience).count

应该为您提供一个包含as键、经验字段和该字段行数的散列。

代码语言:javascript
运行
复制
<% Job.group(:experience).count.each do |name, count| %>
  <%= link_to name, filtered_jobs_path(experience: name, num_days_past: params[:num_days_past], search: params[:search]) %>
  (<%= count %>)
<% end %>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46200354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档