2013-09-21 15 views
2

對於我的Rails應用程序,我想建立一個耙的任務,將有10 invoices填充數據庫中的每個user如何使計數器在Ruby中環

def make_invoices 
    User.all.each do |user| 
    10.times do 
     date = Date.today 
     i = user.invoices.create!(:number => user.next_invoice_number, 
           :date => date += 1.year) 
     i.save 
    end 
    end 
end 

我如何可以由一個本年增加的date

回答

5

你的循環更改爲:

10.times do |t| 
    puts t + 1 # will puts 1,2,3,4,5,6,7,8,9,10 
end 

現在你可以設置你的一年。

+0

非常好,非常感謝。 – Tintin81

1

這是使用Date#next_year

require 'date' 

d = Date.today 
d # => #<Date: 2013-09-21 ((2456557j,0s,0n),+0s,2299161j)> 
d.next_year # => #<Date: 2014-09-21 ((2456922j,0s,0n),+0s,2299161j)> 
+0

謝謝。 Mattherick的解決方案這次更加明顯。 – Tintin81

1
def make_invoices 
    User.all.each do |user| 
    date = Date.today 
    10.times do 
     user.invoices.create!(:number => user.next_invoice_number, 
          :date => (date += 1.year)) 
    end 
    end 
end 

因爲你在10.times循環有date = Date.today,它將在每個循環復位。只需在循環外移動date = Date.today即可。

+0

非常感謝您的幫助。 – Tintin81

1

你可以採取的Date#next_year,這需要一個參數意味着你要多少年推進優勢:

def make_invoices 
    User.all.each do |user| 
    10.times.with_object(Date.today) do |i, date| 
     user.invoices.create!(
     number: user.next_invoice_number, 
     date: date.next_year(i) 
    ) 
    end 
    end 
end 

Numeric#times傳遞一個索引塊。

Enumerator#with_object允許傳遞額外的參數給塊,我們這裏用來避免在塊外部設置局部變量(因爲我們不需要在外面)。