假设我有一个User
对象,它有一个email
属性,我需要它们的最后一个大写字母email
:
u = User.find(1)
letter = u.email.upcase.last
如果u
oremail
在nil
这个链中,那么我得到一个NoMethodError: undefined method 'blah' for nil:Nilclass
. 在大多数情况下,我应该能够解决它,但有时,anil
会到达不应该或难以控制的地方。一种方法是冗长的:
u = User.find(1)
letter = nil
if u && u.email
letter = u.email.upcase.last
end
但这在视图或长链中变得烦人和危险a.bunch.of.properties.down.a.hierarchy
。我阅读了try
Rails 中的方法:
u = User.find(1)
letter = u.try(:email).try(:upcase).try(:last)
这不那么冗长,但我觉得写所有这些尝试都很恶心。一旦我放入try
链条,我必须一直使用它们。有没有更好的办法?