我有一系列方法,在任何时候,其中一个可以根据它们返回的内容(一个集合)返回nil,然后该集合上的方法将会爆炸,因为它是零。
我不确定如何妥善处理这些案件?我应该在每个语句中执行if语句并显式返回方法以停止执行或我该怎么办?
undefined method `created_at' for nil:NilClass
# ./app/models/exercise.rb:132:in `last_placeholder_log_date'
# ./app/models/exercise.rb:136:in `placeholder_log_entries'
# ./app/models/exercise.rb:140:in `placeholder_log_entries!'
def last_placeholder_log_date(user)
self.last_log_entry(user, true).created_at.beginning_of_day
end
如果没有上次日志条目,我如何优雅地处理这种可能性?
答案 0 :(得分:1)
您可以使用try
:
def last_placeholder_log_date(user)
self.last_log_entry(user, true).try(:created_at).try(:beginning_of_day)
end
使用try
,确保如果接收者没有响应则不会引发异常。如果接收方没有响应,则呼叫返回nil
。
答案 1 :(得分:0)
将代码写为:
def last_placeholder_log_date(user)
val = last_log_entry(user, true)
val.created_at.beginning_of_day unless val.nil?
end