我不得不多次使用开始救援方式,我想重构但是我无法创建一个传递使用.parent方法的参数的方法。
这是因为.parent是引发错误的方法,但这是唯一正在改变的东西,我不知道如何在不调用方法的情况下编写代码
我确实想要获取父名称,但如果没有父级,那就是我收到错误的原因。所以我基本上需要它在没有父项时返回空字符串,但我不知道如何递归添加.parent。:
def check_parent_name(object)
if ['body','html', 'head', 'document'].include?(object.parent.name)
''
else
object.parent.content
end
end
begin
parent_content = check_parent_name(img.parent)
rescue => e
parent_content = ''
end
begin
parent_parent_content = check_parent_name(img.parent.parent)
rescue => e
parent_parent_content = ''
end
begin
parent_parent_parent_content = check_parent_name(img.parent.parent.parent)
rescue => e
parent_parent_parent_content = ''
end
begin
parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent)
rescue => e
parent_parent_parent_parent_content = ''
end
begin
parent_parent_parent_parent_parent_content = check_parent_name(img.parent.parent.parent.parent.parent)
rescue => e
parent_parent_parent_parent_parent_content = ''
end
答案 0 :(得分:0)
一种非常简单的方法是直接在语句中使用rescue
:
parent_content = check_parent_name(img.parent) rescue ""
但这不是你应该编码的方式。
就像DaveNewton所说,我们需要知道您想要的代码的用途,我们可以帮助您找到更好,更清晰,更灵活的方式来实现该功能!
您的记录之间似乎有一个树(父子)结构,我错了吗?
递归方法(=调用自身)可能是你想要的,例如:
def your_method(img)
return "" unless img.present?
if img.try(:parent).present?
your_method(img.parent)
else
return check_parent_name(img)
end
end
但我不确定这是你想要的......