2014-11-05 59 views
0

我有一個Rails 4應用程序,其中一個用戶擁有一個Sales_Opportunity,並且每個Sales_Opportunity可以有一個「pipeline_status」,它當前以enum的形式實現。這工作正常,但現在我試圖創建一個用戶顯示,以圖形方式顯示每個pipeline_status(一系列從「前景」到「closed_won」的v形圖),我想顯示徽章在每個V形圖上顯示每個pipeline_status中用戶擁有的機會數量。如何使用rails 4集合並通過枚舉確定對象計數?

我想在rails中使用count方法,並在某些條件下傳遞 - 但是這雖然告訴我用戶有多少個Sales_Opportunities(總計),但它不會接受條件參數並根據我通過的枚舉。任何人都可以幫助或指向我的資源,可以幫助我學習正確的方式來使用它嗎?

Sales_Opportunity.rb:

class SalesOpportunity < ActiveRecord::Base 
default_scope { order('close_date ASC') } 
belongs_to :user 
belongs_to :company 
has_many :timeline_events, dependent: :destroy 
has_many :swots, dependent: :destroy 
validates :close_date, presence: true 
validates :user_id, presence: true 
validates :company_id, presence: true 
validates :opportunity_name, presence: true 
enum pipeline_status: [ :prospect, :qualifying, :demonstrating, :negotiating, :closed_won, :closed_lost, :dormant ] 
end 

我現在試圖表明這些在 「用戶儀表板」:

<div class="container-fluid"> 
    <div class="row"> 
    <div class="col-lg-12"> 
     <div id="chevrons"> 
     <ul> 
      <li><a href="#1">Prospect 
       <span class="badge"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 0") %></span> 
      </a></li> 
      <li><a href="#2">Qualifying 
       <span class="badge"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 1") %></span> 
      </a></li> 
      <li><a href="#3">Demonstrating 
       <span class="badge"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 2") %></span> 
      </a></li> 
      <li><a href="#4">Negotiating 
      <span class="badge"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 3") %></span> 
      </a></li> 
      <li><a href="#5">Closed 
      <span class="badge", id="won"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 4") %></span> 
      <span class="badge", id="lost"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 5") %></span> 
      </a></li> 
      <li id="dormant"><a href="#1">Dormant 
      <span class="badge"><%= @user.sales_opportunities.count(:conditions => ":pipeline_status == 6") %></span> 
     </a></li> 
    </ul> 
    </div> 
</div> 

編輯:爲清楚起見,該頁面的目前的結果是顯示每個徽章的頭號。我只給了這個用戶一個sales_opportunity(枚舉:「展望」),它應該爲「Prospect」V形徽章註冊「1」,其他所有V形徽章註冊爲「0」,以符合我的期望。

我想知道我是否可能需要在Sales_Opportunity代碼或輔助方法內將此邏輯作爲單獨的方法調用提取出來,但認爲必須通過某種方式使其基於標準Rails計數功能。任何幫助將不勝感激。

回答

1

count不再接受條件參數。改爲使用where。例如:

替換:

@user.sales_opportunities.count(:conditions => ":pipeline_status == 1") 

有了:

@user.sales_opportunities.where(pipeline_status: 1).count 
+0

真棒 - 感謝您的幫助。爲什麼他們沒有更新文檔以反映這一點? (可能是因爲很多文檔仍然是關於Rails 3的?) – Zoinks10 2014-11-05 00:26:51

+0

[docs](http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count)已更新。 – infused 2014-11-05 00:35:21

+0

嗯,我有想法使用:我昨天在閱讀的文檔中的條件。我想這會讓我更加警惕我正在從哪個版本的文檔中獲益。感謝您幫助我發現我的錯誤,我非常感謝。 – Zoinks10 2014-11-05 01:02:07