2012-08-02 8 views
5

एक तारीख के बराबर इस तरह दिखता है: 2012-07-23रेल की तारीख तुलना; तारीख अधिक से अधिक या मेरी डेटाबेस में दिन पहले

मैं अगर तारीख से अधिक उम्र के 7 दिन पहले है और कम से कम 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 
+1

क्या आप रेल का उपयोग कर रहे हैं? रूबी में दिन की विधि नहीं है। आपको उस – revolver

+0

के लिए ActiveSupport की आवश्यकता है, क्षमा करें, मैं इसे जोड़ना भूल गया .. मैं रेल 3 का उपयोग कर रहा हूं – dennismonsewicz

उत्तर

5
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 

या (कम पठनीय)

: 14 दिन से पुराना है, लेकिन कोई किस्मत हो रहा है ..

यहाँ मेरी कोड है

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 
+0

मैं 'Time.now.to_date' का उपयोग करने के लिए समाप्त हुआ ... तारीख पर 'अपरिभाषित विधि अब' प्राप्त कर रहा हूं .. लेकिन यह एक आकर्षण की तरह काम करता है !!! – dennismonsewicz

+1

निश्चित रूप से। तिथि थोड़ी अजीब है क्योंकि यह स्वचालित रूप से रेलों में शामिल है (इसलिए आप इसे रेल कंसोल में देखते हैं) लेकिन रूबी में नहीं, इसलिए आपको आईआरबी प्रॉम्प्ट में उपयोग नहीं करना पड़ता है (जब तक आप इसे शामिल नहीं करते)। यह अनगिनत उलझन में है। –

+1

जब आप कंसोल में खेलना चाहते हैं, तो हमेशा 'रेल सी' का उपयोग करें;) –

5

स्वीकार किए जाते हैं जवाब तिथि पर एक अपरिभाषित विधि का उपयोग करता हो सकता है कक्षा। यह सही है:

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 
संबंधित मुद्दे