[英]How to increment counter in Ruby loop
对于我的Rails应用程序,我正在尝试构建一个rake任务,该任务将为每个user
填充10个invoices
的数据库:
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
增加一年?
将你的循环改为:
10.times do |t|
puts t + 1 # will puts 1,2,3,4,5,6,7,8,9,10
end
现在你可以设定你的年份。
这是使用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)>
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
,所以它将在每个循环中10.times
。 只需在循环外移动date = Date.today
。
您可以利用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
允许将其他参数传递给块,我们在这里使用它来避免在块外设置局部变量(因为我们不需要在外面)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.