您應該使用Rails的方式來實現你的代碼:
@order.payments.each do |payment|
if payment.monthly
payment.nb_of_times.times do |nb_month|
payment.date = payment.date + nb_month.months # this is awkward because of the variable name
payment.save
ordered_payment << payment
end
else
ordered_payment << payment
end
end
(該.times
方法是非常有用的,對於每一個整數(Fixnum對象),你可以爲了呼籲.times
它遍歷X倍)
我們在這裏使用的另一個非常有用的方法是.months
,它可用於整數(Fixnum)。它將Integer轉換爲日期中的若干個月。這也適用於.years
,.hours
,.weeks
等:
irb(main):008:0> Time.now + 1.years
#=> 2014-03-05 10:09:58 -0500
irb(main):009:0> Time.now + 1.months
#=> 2013-04-05 10:10:01 -0400
irb(main):010:0> Time.now + 1.hours
#=> 2013-03-05 11:10:04 -0500
irb(main):011:0> Time.now + 1.seconds
#=> 2013-03-05 10:10:08 -0500
# With a variable:
irb(main):014:0> Time.now + Patient.first.id.hours
Patient Load (1.1ms) SELECT "patients".* FROM "patients" LIMIT 1
#=> 2013-10-08 06:12:04 -0400
使用此行:'payment.date = payment.date.to_date >> month'我在我的日期中添加一個月份數,例如「05/03/2013」>> 2將返回「05/05/2013「 – eluus 2013-03-05 14:46:58
哦!我會在一秒內更新我的答案 – MrYoshiji 2013-03-05 15:06:41
它不起作用。我通過在我的時間循環開始處添加'payment_new = payment.dup'來解決此問題。看起來修改是在付款和在ordered_payment中完成的,就像如果ordered_payment只是一個支付鏈接...奇怪。不管怎麼說,還是要謝謝你。 – eluus 2013-03-05 15:21:40