【问题标题】:how to select current and past month-year in rails?如何在 Rails 中选择当前和过去一个月的年份?
【发布时间】:2020-06-19 18:30:56
【问题描述】:

我使用date_select 选择月份和年份,但默认情况下可以选择未来的月份和年份。我想限制未来月份和年份的选择。如何在 Rails 中做到这一点?

这是我当前的代码-

        <div class="field medium-4 columns">
          <%= form.label :attendance_month %>
          <%= form.date_select :attendance_month, { :discard_day => true, :discard_month => false, :discard_year => false },:class => 'month-and-year' %>
        </div>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    使用 :date_select 您无法指定“end_month”,而是创建一个辅助方法:

    # app/helpers/some_helper.rb
    module SomeHelper
      def month_range
        ( Date.today.at_beginning_of_year..Date.today ).each_with_object( [] ) do | date , month_array |
           month_array << date.strftime( "%B %Y" ) 
          end.uniq
      end
    end
    

    然后我会使用 month_range 作为 select_tag 的一部分:

    <%= form.select :attendance_month, month_range, :class => 'month-and-year' %>
    

    【讨论】:

      【解决方案2】:

      您可以通过传入 end_year 来限制日期的选择。

      :end_year => Time.now.year
      

      进一步阅读:

      Action View Date Helpers:date_select

      :end_year - 设置年份选择的结束年份。如果您正在创建新记录,则默认值为 Date.today.year + 5。编辑现有记录时,:end_year 默认为当前选定年份加 5。

      【讨论】:

      • 年是有效的,但 2020 年的 month 是从 1 月到 12 月。应该是JAN-JUN
      • 我已经写了一个新的答案来处理这种不同的情况。
      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多