2014-07-19 68 views
0

在多種型號的輔助方法,我需要檢查,如果兩套日期重疊或沒有,所以我寫了下面的方法:如何界定跨應用程序

def do_dates_overlap(second_record) 
    test = ((self.pickupdate - second_record.returndate) * (second_record.pickupdate - self.returndate)).to_i 
    if test > 0 
    return "yes" 
    elsif test == 0 
    return "edge" 
    elsif test < 0 
    return "no" 
    end 
end 

但我不知道在哪裏把它放在多個模型中。順便說一句,現在我需要它在請求模型,但是當我把它放在請求模型,例如:

class Request < ActiveRecord::Base 

    def do_dates_overlap(second_record) 
    .... 
    end 

end 

然後在控制檯作爲測試我跑Request.last.do_dates_overlap(Request.first),我得到了錯誤:NoMethodError: undefined method do_dates_overlap」爲#`,所以不知道發生了什麼事...

謝謝!

回答

0

對於此行爲,您可以使用模塊。

在應用程序/模型/憂慮/創建一個新的模塊(即datecheck.rb)

module Datecheck 
    def do_dates_overlap(second_record) 
    test = ((self.pickupdate - second_record.returndate) * (second_record.pickupdate - self.returndate)).to_i 
    if test > 0 
     return "yes" 
    elsif test == 0 
     return "edge" 
    elsif test < 0 
     return "no" 
    end 
    end 
end 

在你的類:

class Request 
    include Datecheck 
end 

該類現在將有機會獲得中定義的方法該模塊。將模塊包含在任何需要共享方法的類中。

模塊是根據其關注區域(在本例中使用日期)分隔共享方法的一種很好的方式。

+0

這很好,謝謝!如果你不介意,我很樂意去學習......爲什麼當我把這個方法放入'class Request'本身並且在Request的一個實例上執行它時,我仍然得到了我收到的錯誤?這對我來說很困惑。 – james

+0

@james因爲您將該方法定義爲「實例方法」,因此您應該將其用作「Request.new.do_dates_overlap」。如果你想將它定義爲一個'class method',你需要將它定義爲'def self.do_dates_overlap'。 – Almaron

+0

你可能忘了'重新加載'你的控制檯。你的代碼是正確的 –

相關問題