在ruby中这个日期比较逻辑有问题吗?

时间:2012-09-06 17:05:47

标签: ruby ruby-on-rails-3

我有一个策略类,在该类中我有两种方法可以确定客户是否可以续订其政策。

它们看起来像这样:(在policy.rb模型中)

  def is_renewable?
    if has_not_been_renewed?
       self.ends_on >= Date.today && self.ends_on <= Date.today + 60.days
    end
  end

  def has_not_been_renewed?
    been_renewed = self.renewed_policy.nil? || !self.renewed_policy.active? || !self.active?
  end

因此,出于某种原因,这是在我的本地机器上工作,而不是在我们的暂存环境中。 (我知道,每个程序员的祸根“但它适用于我的机器!”)。

逻辑似乎很简单:首先检查以确保它尚未更新或者它们具有不同的活动策略。然后检查以确保它尚未过期,并且它将在接下来的60天内到期。

在视图中从此行调用:

<%= link_to('Renew', {:action => 'renew', :id => policy.id}, {:class => 'btn btn-success'}) if policy.is_renewable? %>

我真的没有理解为什么这在任何地方都无法奏效。我不会问,但我一直在看这个愚蠢的问题,需要一套新的眼睛来看一遍。感谢

如果有帮助,数据库(本地和登台)的格式如下: yyyy-mm-dd所以今天的日期是2012-09-06

2 个答案:

答案 0 :(得分:2)

假设您在登台数据库中没有数据完整性问题(例如,没有设置ends_on,您认为在没有设置时应该有更新的策略),您可能需要检查系统时钟和确保它既准确又使用你期望的时区。

答案 1 :(得分:0)

数据库上的策略(并且您的暂存和开发环境中的数据库不同)?在某些情况下,您应该以更容易对数据库格式化的格式来格式化日期,例如 Time.now.to_s(:DB)