0

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

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

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

email(lookup).deliver
4

2 回答 2

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

这样这个类就不必担心 user 是否为 nil。它只需要担心返回电子邮件。

于 2012-02-28T21:47:49.377 回答
0

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

或者,如果您不想返回任何东西:

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

于 2012-02-28T21:47:49.660 回答