我读过一些文章称rails rescue
会导致性能问题。
例如
a = Course.where(id: 20).first #better
a = Course.find(20) rescue nil #worse
那么如何以最佳方式重写以下代码
parent_section = parent_section.section rescue nil
我试过这个
parent_section = parent_section.section if parent_section.section.present?
它工作正常,但我觉得它太长而且很乱。 有没有更好的方法来实现这一目标?
如果代码是
parent_section_id = parent_section.section.id rescue nil
如何重写它?
答案 0 :(得分:3)
如果这只是一个Active Record关联,那么当您在section
上调用parent_section
时,它不会引发任何异常。如果没有一个部分,它将自然返回nil,因此您根本不需要rescue
。您应该能够用以下代码替换您的代码:
parent_section = parent_section.section
如果你想在结果上调用某些内容(例如id),那么你可以使用try
- 只会在事件不为零的情况下调用命名的方法,例如:
parent_section_id = parent_section.section.try(:id)
答案 1 :(得分:1)
如果您想获得id
部分的nil
,可以使用try
来查看nil
<{1}}
parent_section_id = parent_section.section.try(:id)