如果没有用户,我如何挽救方法?

时间:2012-02-28 21:45:06

标签: ruby null rescue

我不时有user.id == nil。当发生这种情况时,我的查找失败。拯救此代码最实用的方法是什么?当这种情况发生时你通常会回归什么?

def lookup  
  @data[user.id]["email"]
end

假设邮件方法正在使用返回值

email(lookup).deliver

2 个答案:

答案 0 :(得分:4)

begin
  @data[user.id]["email"]
rescue Exception
  nil
end

或者你可以做到

@date[user.try(:id)]["email"]

如果用户为nil并且你在其上调用id,它将返回nil。

这里真正的问题是你有一个代码味道。无论什么类拥有lookup方法,都知道@data的实现细节。我不建议在没有更多代码的情况下修复,但我建议编写一个只知道如何从数据中提取电子邮件的方法/类。类似的东西:

@data.get_email_for_user

这样,这个班级就不用担心用户是否为零。它只需要担心退回电子邮件。

答案 1 :(得分:0)

user.id.nil? ? <default return val here> : @data[user.id]["email"]

或者,如果您不想退货:

@data[user.id]["email"] if user.id