2017-09-13 62 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