Ruby ROR代码发送许多邮件
我有以下ROR代码Ruby ROR代码发送许多邮件,ruby,ruby-on-rails-3,function,session,Ruby,Ruby On Rails 3,Function,Session,我有以下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分钟调用一次func,调用点不同 isPointInCircle检查点是否在圆内。返回true false 我想在第一次
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分钟调用一次func,调用点不同
isPointInCircle检查点是否在圆内。返回true false
我想在第一次在圈外或圈内发送邮件
表示初始点是否在内部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_状态。如果有一个点模型,我可以加上圆圈?作为实例方法。然后,您可以从数据库中获取上一个点,并比较这两个点:
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,返回true/false的谓词方法通常在末尾用问号命名,以表示它们是yes/no问题。您不需要在代码中添加注释,因为很明显,循环中的点是?返回true或false
另外,您的代码建议您的函数以字符串形式返回true或false,这是一个非常糟糕的主意!如果使用实际的布尔值true或false,则可以将原始代码编写为
def func(point, c, r)
unless point_in_circle?(point, c, r)
AlertMailer.geofence('mail@gmail.com').deliver
end
end
您可以检查以前的状态是否与当前状态相同,并且只有在发生更改时才发送邮件。该点位于圆圈内,而以前在圆圈外,反之亦然
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_状态。如果有一个点模型,我可以加上圆圈?作为实例方法。然后,您可以从数据库中获取上一个点,并比较这两个点:
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,返回true/false的谓词方法通常在末尾用问号命名,以表示它们是yes/no问题。您不需要在代码中添加注释,因为很明显,循环中的点是?返回true或false
另外,您的代码建议您的函数以字符串形式返回true或false,这是一个非常糟糕的主意!如果使用实际的布尔值true或false,则可以将原始代码编写为
def func(point, c, r)
unless point_in_circle?(point, c, r)
AlertMailer.geofence('mail@gmail.com').deliver
end
end
很好…非常好的建议…谢谢…非常好的建议…谢谢