gpt4 book ai didi

ruby-on-rails - ruby rails : Best way to handle repeated error checking without goto?

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:02 24 4
gpt4 key购买 nike

在有 goto 的语言中,我喜欢在函数末尾(返回后)创建一个错误 block ,然后当我在函数内进行错误检查时,我可以简明扼要地在每次检查中转到错误处理程序.据我了解,这是 goto 的一种有效用法,但不被视为不良做法。

伪代码示例:

 def example
if (x) goto error
do something
if (y) goto error
do something
If (z) goto error
do something
return
label 'error'
log "error occurred"
begin
redirect_to :back
rescue
redirect_to root_url
end
return;
end

如您所见,在这种情况下,我的错误 block 与函数本身一样长,重复 3 次会使我的代码大小加倍,而且不是很 DRY。然而,Ruby 似乎不支持 goto,或者至少如果它支持,据我在 Google 上的了解,它是某种可能被标记为邪恶的笑话库。

因此,人们在 Ruby 中做了什么来处理重复的错误检查,在每个错误中应该出现相同的结果?

最佳答案

回调

您应该使用 Callbacks 将这些错误中的许多错误转移到您的模型中.这些适用于与涉及数据库记录的操作相关的错误,即检查数据输入是否合适。

过滤器

使用 before_filters 和 after_filters 检查错误,尤其是当您需要对多个 Controller 操作执行这些检查时。一个例子:

before_filter :check_errors

def example
regular code...
end

private
def check_errors
error checking...
end

案例陈述

使用Case statements改进您的 if 语句,尤其是当您涉及多项检查时。

优先考虑以上内容

只要有可能,只要涉及到数据保存/更新/验证,就一定要在模型中使用回调。

每当要在多个操作中重用代码时,请使用 before_filters(在我看来,每当您涉及这样的错误检查时,总是如此)。

如果您需要这些检查只发生一次,仅在这个 Controller 操作中,不涉及更改记录,只需在有效的 case 语句中重写您的代码(但我的建议仍然是转移到 before_filter)。

关于ruby-on-rails - ruby rails : Best way to handle repeated error checking without goto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com