簡體   English   中英

如何處理Rails中的Nil錯誤?

[英]How to Handle Nil Errors in Rails?

處理Rails中的nil錯誤的正確方法是什么? 我經常收到如下錯誤:

NoMethodError(nil:NilClass的未定義方法“ questions”):

例如,假設我的應用程序中有一些章節,每個章節都有一個問題。 我想從當前問題中調用上一章中的問題,因此我在question.rb中編寫以下代碼:

def previous_question
 self.chapter.previous.question
end

這可能會導致上述錯誤,因此我在模型中編寫了一個方法來檢查是否會導致nil結果:

def has_previous_question?
 self.chapter and self.chapter.previous and self.chapter.previous.question
end

如果我確定在調用previous_question之前先調用它,它可以工作,但是看起來很荒謬。 有沒有更好的方法來處理Rails中的nil錯誤?

我不能說這是正確的方法,但這是處理這種情況的另一種方法:

def previous_question
  self.chapter.previous.try(:question)
end

這樣就不會有任何錯誤,如果沒有上一章,該方法將簡單地返回nil

如果您想返回其他內容以防萬一,則可以編寫以下代碼:

def previous_question
  self.chapter.previous.try(:question) || returning_this_value_instead
end

旁注:在這種情況下,您無需使用self:

def previous_question
  chapter.previous.try(:question) || returning_this_value_instead
end

我最喜歡的視圖渲染方法之一:

http://apidock.com/rails/Object/try

有趣的方法是使用nil對象 ,盡管它們並不適合所有情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM