Ruby on rails Rails 5 Ruby 2.5.3基于月份范围的If语句

Ruby on rails Rails 5 Ruby 2.5.3基于月份范围的If语句,ruby-on-rails,ruby,Ruby On Rails,Ruby,所以我在做一个私人项目 我是一名卡车司机,我正在开发一个简单的应用程序来跟踪和计算收入等 我想做的是强调我目前的活性燃料附加费是基于几个月的范围,这可能是一个更好的方法 在这种情况下,其4月1日至10月31日和11月1日至3月31日可根据合同要求进行变更 我的数据库中有一个activeDate和endDate列,这是我想到的,但似乎不起作用 **<<index.html.erb>>** <tbody> <% @fscs.ea

所以我在做一个私人项目

我是一名卡车司机,我正在开发一个简单的应用程序来跟踪和计算收入等

我想做的是强调我目前的活性燃料附加费是基于几个月的范围,这可能是一个更好的方法

在这种情况下,其4月1日至10月31日和11月1日至3月31日可根据合同要求进行变更

我的数据库中有一个activeDate和endDate列,这是我想到的,但似乎不起作用

**<<index.html.erb>>**

      <tbody>
        <% @fscs.each do |fsc| %>
          <% if Date.today === (fsc.activeDate..fsc.endDate) %>
            <tr>
              <td class="fsc_active"><%= fsc.name %></td>
              <td class="fsc_active"><%= fsc.rate %></td>
              <td class="fsc_active"><%= fsc.activeDate %></td>
              <td class="fsc_active"><%= fsc.endDate %></td>
              <td><%= link_to 'View', fsc %></td>
              <td><%= link_to 'Edit', edit_fsc_path(fsc) %></td>
              <td><%= link_to 'Delete', fsc, method: :delete, data: { confirm: 'Are you sure?' } %></td>
            </tr>
          <% else %>
            <tr>
              <td class="fsc_inactive"><%= fsc.name %></td>
              <td class="fsc_inactive"><%= fsc.rate %></td>
              <td class="fsc_inactive"><%= fsc.activeDate %></td>
              <td class="fsc_inactive"><%= fsc.endDate %></td>
              <td><%= link_to 'View', fsc %></td>
              <td><%= link_to 'Edit', edit_fsc_path(fsc) %></td>
              <td><%= link_to 'Delete', fsc, method: :delete, data: { confirm: 'Are you sure?' } %></td>
            </tr>
          <% end %>
        <% end %>
      </tbody>
任何关于我哪里出了错的建议,或者关于如何改进的建议,都将不胜感激!如果需要更多信息,请告诉我


编辑1:对不起,在这种情况下,只有月份才重要,而不是年份或日期。我很抱歉没有提到这一点

试试这样做:

(fsc.activeDate..fsc.endDate).include?(Date.today)
您试图将今天的日期等同于一系列日期,但希望检查今天的日期是否在日期范围内

(fsc.activeDate..fsc.endDate).cover?(Date.today)

不要使用include?,而是使用cover?。它的效率大大提高了。包括将创建一个包含所有可能值的完整数组,以查看该值是否在列表中。掩蔽只需将最小值和最大值与>=和一起使用,您仍然可以使用三重相等aka case equal FWIW。只需将参数交换为===:您需要在范围上声明的参数,而不是相反的参数:

- Date.today === (fsc.activeDate..fsc.endDate)
+ (fsc.activeDate..fsc.endDate) === Date.today

那些医生很棒!这就是我想要了解更多关于范围的信息!谢谢你提供链接@ShawnWilson没问题@ShawnWilson我刚刚更新了我的答案,提到了时区。这与你直接问的问题无关,但与你发布的代码有关。你知道,这是我从未想过的事情。然而,时区在卡车运输中有点重要,现在我需要重新考虑应用程序中的其他一些项目。谢谢