8

私のデータベースの日付は次のようになります。2012-07-23

日付が 7 日前より古く 14 日未満であるかどうか、または日付が 14 日前よりも大きいかどうかを確認しようとしていますが、うまくいきません..

これが私のコードです:

def progress_report_status_check(date)
    progress_date = date.to_date
    seven_days = 7.days.ago.to_date
    fourteen_days = 14.days.ago.to_date

    if seven_days > (progress_date - 7.days.ago.to_date) or (progress_date - 14.days.ago.to_date) < fourteen_days
      "due"
    elsif (progress_date - 14.days.ago.to_date) > fourteen_days 
      "overdue"
    end 
  end
4

2 に答える 2

10
def progress_report_status_check(progress_date) # Pass in a date
  if (progress_date < Date.now-14.days)
    "overdue"
  elsif (progress_date < Date.now-7.days) 
    "due"
  end 
end

または(読みにくい)

def progress_report_status_check(progress_date) # Pass in a date
  (progress_date < Date.now-14.days) ? "overdue" : ((progress_date < Date.now-7.days) ? "due" : "") : "" 
  end 
end

使い方によっては、名前付きスコープを作成したい場合があります。たとえば、次のようにします。

scope :overdue where(:progress_date < Date.now-14.days)
scope :due where(:progress_date < Date.now-7.days)

次に、呼び出しコードは次のようになります

def progress_report_status_check(progress_date) # Pass in a date
  self.overdue? ? "overdue" : self.due? ? : "due" : ""
  end 
end
于 2012-08-02T01:59:23.137 に答える
6

受け入れられた回答は、Date クラスで未定義のメソッドを使用しています。正解です:

def progress_report_status_check(progress_date) # Pass in a date
  if (progress_date < (Date.today-14.days))
    "overdue"
  elsif (progress_date < (Date.today-7.days)) 
    "due"
  end 
end
于 2014-05-24T15:24:16.793 に答える