gpt4 book ai didi

ruby - ROR 代码发送许多邮件

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

我有以下 ROR 代码

def func (point,c,r)          
res=isPointInCircle(point,c,r) #returns true/ false
if res=='false'
AlertMailer.geofence('mail@gmail.com').deliver
end
end

每 2 分钟调用一次不同点的函数。

isPointInCircle 检查点是否在圆内。返回真假。

我想在第一次在圈外或圈内时发送邮件。

  • 表示如果初始点在内部 1 小时。

    没有邮件

  • 如果它出去了

    我想发送单个邮件,但没有发生,

    因为 func 每 2 分钟调用一次。所以我不希望每 2 分钟发送一次电子邮件。

那么如何做到这一点

最佳答案

您可以检查之前的状态是否与当前状态相同,只有在有变化时才发送邮件(点在圆圈内,之前在圆圈外,反之亦然)。

def func(point, c, r)
status = point_in_circle?(point, c, r)
if last_status != status
AlertMailer.geofence('mail@gmail.com').deliver
end
end

如果不进一步了解您的应用,就很难说出如何实现 last_status。如果有 Point 模型,我可能会添加 in_circle? 作为实例方法。然后你可以从数据库中获取前一个点并将两者进行比较:

def check_point_status(current, previous, c, r)
if current.in_circle?(c, r) != previous.in_circle?(c, r)
AlertMailer.geofence('mail@gmail.com').deliver
end
end

几个要点:Ruby 通常对变量和函数使用 snake_case 而不是 camelCase,并且“predicate”方法(返回 true/false)通常以问题命名标记在末尾以表明它们是是/否问题。您不需要代码中的注释,因为很明显 point_in_circle? 返回 true 或 false。

您的代码还建议您的函数返回 "true""false" 作为字符串,这是一个非常糟糕的主意!如果您使用实际的 bool 值 truefalse,您可以将原始代码编写为

def func(point, c, r)          
unless point_in_circle?(point, c, r)
AlertMailer.geofence('mail@gmail.com').deliver
end
end

关于ruby - ROR 代码发送许多邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154701/

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