我在我的数据库中有一个名为“体验”的专栏,用户可以保存0到2年、2-5年、5-10年、10+年份的值。我的问题是如何计算这些值?我并不是想要一个总数的总和,我试图得到列中有多少个"2-5年“值,并在视图中显示给用户。
因此,在视图中,用户将看到数据库表列中名为experience的值,以及发布了多少作业,并包含这样的值。
经验:
0至2年(3)
2-5岁(15岁)
目前我正在做这件事。
<%= 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,但数据库似乎一直在被查询
(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"
发布于 2017-09-13 16:41:59
你想按经验分组,然后数一数:
Job.group(:experience).count
这将返回一个散列:
{
'0-2 years' => 1,
'10+ years' => 2,
'2-5 years' => 1,
'5-10 years' => 2
}
所以在你看来,你可以写这样的东西:
# 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 %>
发布于 2017-09-13 14:41:28
Job.group(:experience).count
应该为您提供一个包含as键、经验字段和该字段行数的散列。
<% 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 %>
https://stackoverflow.com/questions/46200354
复制相似问题