我想创建一个月份下拉列表,以便不会出现当年的前几个月。现在我的代码是:
<%= f.date_select :card_expires_on, :discard_day => true, :start_year => Date.today.year, :end_year => (Date.today.year+10), :add_month_numbers => true %>
它现在显示了我所有的月份,但我想删除或隐藏过去的几个月..有没有办法?
提前致谢!:-)
我想创建一个月份下拉列表,以便不会出现当年的前几个月。现在我的代码是:
<%= f.date_select :card_expires_on, :discard_day => true, :start_year => Date.today.year, :end_year => (Date.today.year+10), :add_month_numbers => true %>
它现在显示了我所有的月份,但我想删除或隐藏过去的几个月..有没有办法?
提前致谢!:-)
我没有对此进行测试,但我认为它应该可以工作。
<%= select nil, "name_of_your_model[card_expires_on(1i)]", (Date.today.year..Date.today.year+10).collect { |y| y }, options = {}, id: "card_expires_on_1i" %>
<%= select nil, "name_of_your_model[card_expires_on(2i)]", (Date.today..Date.today.end_of_year).collect { |d| ["#{d.strftime('%m')} - #{d.strftime('%B')}", d.strftime('%m')] }.uniq, options = {}, id: "card_expires_on_2i" %>
<%= text_field_tag "name_of_your_model[card_expires_on(3i)]", nil, type: 'hidden', value: Date.today.day, id: "card_expires_on_3i" %>
基本上,当您将 date_select 放入表单时,它会创建三个选择。然后,Rails 使用“(1i)”、“(2i)”和“(3i)”分别将年、月和日重新组合在一起。确保将“name_of_your_model”更改为用于表单的模型名称,并将 text_field 的值更改为您想要的默认日期。
更新
我刚刚测试了这个,它确实有效!
在我看来,您应该能够将其添加到助手中。我会回避 javascript
为剩余月份()添加您自己的方法或一些类似的东西会更容易使用。