我在軌初學者,我需要我的控制器上比較2日期時間:導軌:未定義的方法'>」近親:NilClass
@b = Book.find(params[:book][:id])
if @b.expiry_date > DateTime.now
... something here ...
end
但我得到這個錯誤:
undefined method `>' for nil:NilClass
任何人都有一個想法,爲什麼?
我在軌初學者,我需要我的控制器上比較2日期時間:導軌:未定義的方法'>」近親:NilClass
@b = Book.find(params[:book][:id])
if @b.expiry_date > DateTime.now
... something here ...
end
但我得到這個錯誤:
undefined method `>' for nil:NilClass
任何人都有一個想法,爲什麼?
運算符是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
的存在。
確切地說,'@ b'的'expiry_date'是零,而不是'@ b'。 – Pavan
你說得對,當我寫作時,我領先於自己。 –
只需添加一個檢查記錄是不是在你的if語句無如圖所示:
@b = Book.find(params[:book][:id])
if [email protected]_date.nil? && @b.expiry_date > DateTime.now
... something here ...
end
如果所有的書都應該有到期日,你應該補充的是堅持到期日包括驗證在您的書籍模型中創建/更新書籍記錄時!
這意味着特定書籍對象的'expiry_date'是'nil' – Pavan