加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

优雅的方式来处理“未定义的方法`每个’为nil:NilClass”在Ruby

发布时间:2020-12-17 01:50:08 所属栏目:百科 来源:网络整理
导读:我有一个场景,我有可选的关联.有时协会在那里,有时则不是. 当我尝试在屏幕上显示数据时遇到问题(想想一个简单的索引操作). 请考虑以下应用程序设置: 项目有很多可交付成果 项目有许多部署记录(此模型的两个属性是’名称’和’描述’) 我有兴趣从Deliverable
我有一个场景,我有可选的关联.有时协会在那里,有时则不是.

当我尝试在屏幕上显示数据时遇到问题(想想一个简单的索引操作).

请考虑以下应用程序设置:

>项目有很多可交付成果
>项目有许多部署记录(此模型的两个属性是’名称’和’描述’)

我有兴趣从Deliverables Index Action中提取部署记录关联.

我让它使用以下代码,但我发现它有点难看:

@array = deliverable.try(:project).try(:deployment_record)
if @array
   @array.each do |r|
   [r.name,r.description].join(' - ')
end

什么是更优雅的方式来重写这个?我试过了

deliverable.try(:project).try(:deployment_record).each do |r|
   [r.name,r.description].join(' - ')
end

但我继续遇到未定义的方法`每个’为nil:NilClass错误.我似乎无法找到一种方法来优雅地绕过Nil对象上的.each.我有一种感觉,不知怎的,我应该能够更优雅地做到这一点,但我不能把手指放在上面.

我通过代码库重复使用了这个剪切,所以如果我只是将它复制并粘贴到任何地方,那么额外的两行真的会让我感到害怕.我很高兴关联检索失败,我只想优雅地失败而没有任何错误或消息.有任何想法吗?

解决方法

你可以使用to_a方法来确保你有一个数组可以使用(nil将产生一个空数组):

@array.to_a.each do |item|
    #Whatever...
end

这不是最优雅的事情 – 您必须记住将to_a添加到循环中 – 但如果您不能保证@array是有效的可枚举,那么这是保持代码崩溃的最简单方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读