假设我有一个User对象,它有一个email属性,我需要它们的最后一个大写字母email:
u = User.find(1)
letter = u.email.upcase.last
如果uoremail在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。我阅读了tryRails 中的方法:
u = User.find(1)
letter = u.try(:email).try(:upcase).try(:last)
这不那么冗长,但我觉得写所有这些尝试都很恶心。一旦我放入try链条,我必须一直使用它们。有没有更好的办法?