我的控制器和视图中有一堆类似current_user.articles
或current_user.name
的代码。显然,当没有当前用户时,这将导致错误。我可以一直写current_user && current_user.articles
之类的东西,但这是重复的。
如果在current_user上调用了一个方法,但current_user不存在,是否有某种方法可以禁用此错误消息并仅返回警告?
答案 0 :(得分:1)
与其禁用错误(这似乎不是一个特别棒的想法),不如考虑使用红宝石安全导航操作符&.
或.try
。
请注意,有些人(例如here's)将其视为代码气味。但是,IMO,比禁用NoMethodError
的气味要小。
答案 1 :(得分:0)
您可以在访问任何对象方法或属性之前使用&
以避免错误。这样,如果对象为nil,则将避免&
之后的所有链,结果将为nil。
current_user&.name # User name if current_user exists, nil otherwise