Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby ROR代码发送许多邮件_Ruby_Ruby On Rails 3_Function_Session - Fatal编程技术网

Ruby 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 我想在第一次

我有以下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

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

表示初始点是否在内部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

很好…非常好的建议…谢谢…非常好的建议…谢谢