你可以檢查,如果前一個狀態是一樣的當前狀態,只發送了郵件,如果出現了變化(點爲圓內,它之前在外面,反之亦然)。
def func(point, c, r)
status = point_in_circle?(point, c, r)
if last_status != status
AlertMailer.geofence('[email protected]').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('[email protected]').deliver
end
end
幾個指針:紅寶石通常採用snake_case
不camelCase
變量和函數,和「上游」的方法(返回true/false)被通常在最後用問號命名以表明他們是/否問題。您不需要在代碼中使用註釋,因爲point_in_circle?
顯然會返回true或false。
此外,您的代碼建議您的函數返回"true"
或"false"
作爲字符串,這是一個非常糟糕的主意!如果您使用的實際布爾值true
或false
,你可以寫你的原始代碼
def func(point, c, r)
unless point_in_circle?(point, c, r)
AlertMailer.geofence('[email protected]').deliver
end
end
好......要命suggession..Thanks –