0

根据印度财政年度(4 月 1 日至 3 月 31 日),当月份更改为 1 月时,我如何获得范围我的逻辑在 12 月 31 日之后失败,没有任何显示。这是我显示所有月份的代码:模型:

def self.get_month(month)
    months={
       '1'=> 'January',
       '2'=> 'February',      
       '3'=> 'March',
       '4'=> 'April',
       '5'=> 'May',
       '6'=> 'June',
       '7'=> 'July',
       '8'=> 'August',
       '9'=> 'September',
       '10'=> 'October',
       '11'=> 'November',
       '12' => 'December'
      }
   months[month]
 end 

意见:

<% (current_financial_year.start_date.month..Date.today.month).times do |a| %>
             <tr>
               <td><%= PayrollDetails.get_month(a.to_s)%></td>
             </tr>
             <% end %>

此代码在 12 月份之前运行良好,但在 1 月份年份更改时它什么也不显示,我收到此错误:

undefined method `times' for 4..1:Range

我如何在rails3中解决这个反向范围问题,在此先感谢。

4

2 回答 2

1

看来您没有处理包装盒。有很多方法可以处理它。这是我能想到的最基本的方法:

<% (current_financial_year.start_date.month..(Date.today.month < current_financial_year.start_date.month ? Date.today.month+12 : Date.today.month)).times do |a| %>
  <tr>
    <td><%= PayrollDetails.get_month((a%12).to_s)%></td>
  </tr>
<% end %>

这个比较难看。您可能想要创建一个局部变量,current_month或者您可以打开Date该类并定义一个执行? :逻辑的财务月份。

我希望这会有所帮助。

于 2013-01-12T21:35:49.537 回答
0

我同意@Geoff 的回答我已经改变了一点以适应我的情况:

 <% for a in (current_financial_year.start_date.month..(Date.today.month < current_financial_year.start_date.month ? Date.today.month+12 : Date.today.month)) %>
             <tr>
               <td><%= PayrollDetail.get_month((a>12? (a -12) : a ).to_s)%></td>
<% end %>

这对我有用。

于 2013-01-15T08:45:15.467 回答