2017-07-29 57 views
2

我有一個發票模型,具有付費布爾屬性。帳戶和發票之間有關聯,我只想在視圖中顯示未付帳單。每個如果不是零 - Rails

我用它來顯示所有發票:

<table class="table"> 
    <thead> 
    <tr> 
     <th>Invoice Number</th> 
     <th>Invoice Date</th> 
     <th>Invoice Total</th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @account.invoices.each do |invoice| %> 
     <tr> 
     <td><%= invoice.id%> </td> 
     <td><%= invoice.created_at.time.to_formatted_s(:long)%> Zulu </td> 
     <td><%= invoice.total %></td> 
     </tr> 
    <% end %> 
    </tbody> 

但我不能確定如何限制結果到其中零隻會顯示發票paid。我嘗試過:<% @account.invoices.each do |invoice| unless @account.invoices.paid == 'nil' %>,但遇到錯誤。很明顯,我得到了我的語法錯誤。有什麼建議?

+0

不知道,也許嘗試'@account.invoices.select做|發票| invoice.nil?結束' –

+3

@Atul Khanduri的答案是解決這個問題的「Rails方法」 - 你應該這樣做。只是爲了記錄,'你在尋找的'在某些條件下跳過塊的迭代'將會有條件地使用'next' - 例如,你可以把'next作爲invoice.paid.nil?'作爲第一個你的'每個'塊的行。 – omnikron

+0

@omnikron感謝您的信息 – PSCampbell

回答

8

在這種情況下,您可以使用named scope

創建一個unpaid範圍在invoices模型:

scope :unpaid, -> { where(paid: [nil, false]) } 

,並使用該視圖中,類似這樣的:

<% @account.invoices.unpaid.each do |invoice| %> 
+1

偉大 - 應該想到這一點。非常好,謝謝! – PSCampbell

+0

@PSCampbell ...您的歡迎。我想你忘了[接受](https://meta.stackexchange.com/a/5235)答案,這是一種SO的方式來表示感謝。 ;) –

+1

它是在一段時間,現在得到它! – PSCampbell