2013-03-05 119 views
0

我有付款清單,如果必須完成X次,我想通過在前一日期中添加+1來更新本月。更改日期月份不起作用

  • 2013年3月5日
  • 2013年4月5日
  • 2013年5月5日

我:

例如,如果每月3次的支付今天保存已寫這個:

for payment in @order.payments 
    if (payment.monthly) 
    for month in 0..(payment.nb_of_times - 1) 
     payment.date = payment.date.to_date >> month 
     ordered_payment << payment 
    end 
    else 
    ordered_payment << payment 
    end 
end 

但問題是它返回S:

  • 2013年5月5日
  • 2013年5月5日
  • 2013年5月5日

你能告訴我,我錯了?

回答

0

您應該使用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 
+0

使用此行:'payment.date = payment.date.to_date >> month'我在我的日期中添加一個月份數,例如「05/03/2013」​​>> 2將返回「05/05/2013「 – eluus 2013-03-05 14:46:58

+0

哦!我會在一秒內更新我的答案 – MrYoshiji 2013-03-05 15:06:41

+0

它不起作用。我通過在我的時間循環開始處添加'payment_new = payment.dup'來解決此問題。看起來修改是在付款和在ordered_pa​​yment中完成的,就像如果ordered_pa​​yment只是一個支付鏈接...奇怪。不管怎麼說,還是要謝謝你。 – eluus 2013-03-05 15:21:40

0

如果你想要做什麼,我認爲你是 - 也就是說,在一個月的時間間隔返回日期的數組,隨後您@order.payments日期爲payment.nb_of_times倍,這應該做的伎倆:

ordered_payment = [] 
@order.payments.each do |payment| 
    if payment.monthly 
    payment.nb_of_times.times do |i| 
     ordered_payment << payment.date + (i+1).months 
    end 
    else 
    ordered_payment << payment.date 
    end 
end 

,應返回日期的數組。

+0

不是。我想返回一系列的paiments。舉個例子,我有一個月付款日期是「2013年5月3日」,次數是2次。我希望我的功能可以通過兩次付款返回orders_payment,一次是開始「05/03/2013」​​,另一次是其他的「05/04/2013」​​ – eluus 2013-03-05 14:58:04

+0

這正是我的代碼所做的。 – 2013-03-05 15:04:49

相關問題