Rails - 返回select标记的月份数组

Kev*_*ker 15 arrays select ruby-on-rails date

我在Rails 2.3.8上的应用程序中,需要返回一个月份名称和数字的数组,以插入到options_for_select语句中.到目前为止我所做的是有点工作,但不是真的.我这样做的原因是因为select语句需要一个提示,默认情况下你不能在2.3.8中给出options_for_select(至少据我所知).

这是我到目前为止:

@months = [['-', '']]
(1..12).each {|m| @months << [[Date::MONTHNAMES[m], m]]}
Run Code Online (Sandbox Code Playgroud)

所以我想要返回的是这样的选项:

<option value="1">January</option>
<option value="2">February</option>
Run Code Online (Sandbox Code Playgroud)

但是,相反,我得到:

<option value="January1">January1</option>
<option value="February2">February2</option>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

kru*_*hah 32

试试这个!

@months = [['-', '']]
(1..12).each {|m| @months << [Date::MONTHNAMES[m], m]}
Run Code Online (Sandbox Code Playgroud)

  • 是的,括号太多了.您可以使用`map`进一步压缩它,并将其传递给`options_for_select`:`options_for_select((1..12).map {| m | [Date :: MONTHNAMES [m],m]})`. (17认同)

小智 18

Date::MONTHNAMES.each_with_index.collect{|m, i| [m, i]}
=> [[nil, 0], 
    ["January", 1], 
    ["February", 2], 
    ["March", 3], 
    ["April", 4], 
    ["May", 5], 
    ["June", 6], 
    ["July", 7], 
    ["August", 8], 
    ["September", 9], 
    ["October", 10], 
    ["November", 11], 
    ["December", 12]]
Run Code Online (Sandbox Code Playgroud)

带默认选项的缩写选择

Date::ABBR_MONTHNAMES.compact.each_with_index.collect{|m, i| [m, i+1]}
                     .insert(0, ['Please Select', nil])
=> [["Please Select", nil], 
    ["Jan", 1], 
    ["Feb", 2], 
    ["Mar", 3], 
    ["Apr", 4], 
    ["May", 5], 
    ["Jun", 6], 
    ["Jul", 7], 
    ["Aug", 8], 
    ["Sep", 9], 
    ["Oct", 10], 
    ["Nov", 11], 
    ["Dec", 12]]
Run Code Online (Sandbox Code Playgroud)


raf*_*kin 11

您可以使用rails helper select_month,例如:

select_month(Date.today)
Run Code Online (Sandbox Code Playgroud)