我选择了一年中所有月份的数字(1,2,3 ... 12)以及将月份数转换为其名称的方法。例如:(1 - > 1月,2月,2月......)
我想在select
上使用它,显示月份的名称而不是数字。
我的问题是,如何生成一个选择,将此方法传递给下面的options_for_select
?
<div class="ls-custom-select">
<%=
form.select(
:month,
options_for_select((1..12), selected: @current_month),
{},
{ class: "ls-select" }
)
%>
</div>
提前致谢
答案 0 :(得分:1)
您可以使用一对数组来获取单独的文本和值:
options_for_select([["January", 1], ["February", 2]])
# => <option value="1">January</option>
# => <option value="2">February</option>
您可以使用Rails 18n模块获取本地化的月份名称:
(1..12).to_a.zip(I18n.t("date.month_names").drop(1))
# => [[1, "January"], [2, "February"], [3, "March"], [4, "April"], [5, "May"], [6, "June"], [7, "July"], [8, "August"], [9, "September"], [10, "October"], [11, "November"], [12, "December"]]
.zip
将两个数组合并为一对。因为month_names数组中的第一个元素是nil(没有0月),所以需要.drop(1)
。
<div class="ls-custom-select">
<%=
form.select(
:month,
options_for_select(
(1..12).to_a.zip(I18n.t("date.month_names").drop(1),
@current_month # selected
)
{},
{ class: "ls-select" }
)
%>
</div>
您不需要编写方法来获取月份名称。使用I18n.t("date.month_names")[number]
。或者,如果本地化不重要,请使用Date::MONTHNAMES[number]
。