2016-05-08 125 views
0

我在軌初學者,我需要我的控制器上比較2日期時間:導軌:未定義的方法'>」近親:NilClass

@b = Book.find(params[:book][:id]) 
if @b.expiry_date > DateTime.now 
    ... something here ... 
end 

但我得到這個錯誤:

undefined method `>' for nil:NilClass 

任何人都有一個想法,爲什麼?

+2

這意味着特定書籍對象的'expiry_date'是'nil' – Pavan

回答

3

運算符是ruby中的方法,所以您的undefined method '>' for nil:NilClass錯誤表示@b.expiry_date在此行上爲零:if @b.expiry_date > DateTime.now

如果存在@b.expiry_date,可以使用短路邏輯僅評估條件。

if @b.expiry_date && (@b.expiry_date > DateTime.now) 

的表達是否是唯一真正的,如果&&的雙方都還不錯,所以(@b.expiry_date > DateTime.now)不會被第一條件,@b.expiry_date,是假的或零執行。

否則,您需要添加邏輯/驗證以確保expiry_date的存在。

+0

確切地說,'@ b'的'expiry_date'是零,而不是'@ b'。 – Pavan

+0

你說得對,當我寫作時,我領先於自己。 –

0

只需添加一個檢查記錄是不是在你的if語句無如圖所示:

@b = Book.find(params[:book][:id]) 
     if [email protected]_date.nil? && @b.expiry_date > DateTime.now 
     ... something here ... 
    end 

如果所有的書都應該有到期日,你應該補充的是堅持到期日包括驗證在您的書籍模型中創建/更新書籍記錄時!

相關問題