繁体   English   中英

如何在Ruby循环中增加计数器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM