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
您的问题的唯一解决方案是确保您的循环终止。
大家早上好。在我的模型中,我创建了一个显示行的方法。 该页面无法正常工作,因为下一个和具体化我们未定义的方法, 所以我试了一下。但是该页面未加载并在浏览器上显示此错误。 “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
您的问题的唯一解决方案是确保您的循环终止。