Rails While 循环:无法加载页面

Rails While Loop: Can't load a page

大家早上好。在我的模型中,我创建了一个显示行的方法。 该页面无法正常工作,因为下一个和具体化我们未定义的方法, 所以我试了一下。但是该页面未加载并在浏览器上显示此错误。 “504 网关超时”

v = self.versions.first
 if v.present?
 while v.try(:reify).try(:reason).try(:name).blank? do
    v = v.try(:next)
  end
  v.reify.try(:reason).try(:name)
end

您有什么建议可以让这段代码更简洁并防止它再次加载长页面?

你的代码在第一次循环迭代后实际上与下面相同,这是一个无限循环

while nil.try(:reify).try(:reason).try(:name).blank? # always true
   # ...
end

您的网络服务器在等待循环终止时放弃并因此报告 - 504 - Gateway timeout 到 user/browser。


try 允许您在 nil 对象上调用方法而不抛出任何异常 - 如果对象是 nil 或者方法未实现,它将 return nil.

所以,假设 v 是一些没有实现 reify 方法的对象,那么,v.try(:reify) 将是 nil

 v = "Ruby"
 v = v.try(:reify)
 #=> nil
 v = v.try(:next)
 #=> nil
 v.try(:reify).try(:reason).try(:name).blank?
 #=> true

您的问题的唯一解决方案是确保您的循环终止。