2012-09-22 41 views
-1

我的问题与Rails - return an array of months for a select tag类似。Rails如何为选择标签创建一个月数组?

但我想这样的一个数组:

[ 
    ["September", 9], 
    ["August", 8], 
    ["July", 7], 
    ["June", 6], 
    ["May", 5], 
    ["April", 4], 
    ["March", 3], 
    ["February", 2], 
    ["January", 1], 
    ["December", 0] 
    ["November", -1], 
    ["October", -2] 
] 

如果当月是十月,这将是:

[ 
    ["October", 10] 
    ["September", 9], 
    ["August", 8], 
    ["July", 7], 
    ["June", 6], 
    ["May", 5], 
    ["April", 4], 
    ["March", 3], 
    ["February", 2], 
    ["January", 1], 
    ["December", 0] 
    ["November", -1] 
] 
+0

高清个月 个月= [ ' - ', ''] (1..12)。每个{|本月|月<< [Date :: MONTHNAMES [month],motnh]} end 并将该方法添加到您的select_tag选项 –

回答

5

这应做到:

require 'date' 
Date::MONTHNAMES[1..12].reverse.rotate(12-Time.now.month).each_with_index.collect{|m, i| [m, Time.now.month-i]} 

编辑:

就像你在您想要展示年度的评论中提到,您需要一种不同的方法来“回溯”。当你正在使用的轨道,你可以使用ActiveRecord的日期功能来做到这一点:

require 'active_support/core_ext/date/calculations' 
t = Time.now 
(0..11).collect { |i| current = t.advance(months:-i); ["#{Date::MONTHNAMES[current.month]} #{current.year}", t.month-i ] } 
+0

Super。如何在月份名称后添加年份? –

+0

如果你想要一年,你需要一种不同的方法,因为你需要找出去年12月份的年份变化。 –

+0

我在想,如果有可能只是2011年所有的负数和零值。我认为这将是最简单的解决方案。 –