2017-09-13 67 views
0

获得价值数我有我的数据库名为“体验”的用户可以保存的值称为0-2岁,2-5岁,5-10年,10年以上的列。我的问题是如何计算这些值?我并不是在寻找所有的总和,而是试图计算该列中存在多少“2-5年”的值,并在视图中将其呈现给用户。Rails的:从数据库

所以在视图中,用户将看到该值从数据库表列名为经验,那么有多少作业发布并包含像这样的价值。

经验:

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

(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" 

回答

0

你想通过体验组,然后指望它:

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 %> 
+0

的唯一的事情就是链接不下令我想在页面上了路。你知道我怎样才能得到链接返回,所以它将在0-2年,2-5年,5-10年,10年以上的顺序? – Scott

+0

遗憾的是不工作,得到“未定义的方法'每个”近亲:NilClass”从<%@ exp_names.each做未来|名称| %> – Scott

+0

现在很好,我只需在索引操作中添加'@exp_names'和'@exp_counts'。感谢所有的帮助,非常感谢! – Scott

2
Job.group(:experience).count 

应该给你一个哈希值与查询作为关键字体验场和值的行数为那场

<% 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 %> 
+0

我喜欢这个有很多!很好的答案。 – Cyzanfar

+0

谢谢主席先生:) – Ursus

+0

所以我看到Job.group(:经验).Count中返回 (0.3ms的)SELECT COUNT(*)AS count_all, “工作”, “体验” 为jobs_experience从 “工作” GROUP BY“工作。 ”。 “经验” => { “0-2岁”=> 1, “10岁以上”=> 2, “2-5岁”=> 1, “5 - 10年”=> 2}怎么办我认为这是在视图中,但? – Scott