如何正确处理模型中的nil?

时间:2013-12-19 19:44:52

标签: ruby-on-rails ruby

我有一系列方法,在任何时候,其中一个可以根据它们返回的内容(一个集合)返回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

如果没有上次日志条目,我如何优雅地处理这种可能性?

2 个答案:

答案 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