:
# in user.rb
after_create :decrease_value_periodically
private
def decrease_value_periodically
self.value = value * 0.99
self.save!
decrease_value_periodically if value > 0
end
handle_asynchronously :decrease_value_periodically,
:run_at => Proc.new { 24.hours.from_now }
이 예제는 사용자의 생성 후 24 시간 실행됩니다 또 다시 자체를 통해 일정을 조정하고있다.
다른 옵션은 모든 사용자의 값을 동시에 (예 : 자정) 다시 계산하는 일일 크론 작업 일 수 있습니다.
# command for Cron
rails runner "User.recalculate_all_values"
# in user.rb
def self.recalculate_all_values
User.all.each { |user| user.decrease_value }
end
private
def decrease_value
if value > 0
self.value = value * 0.99
self.save!
end
end
는 IMO가 우선 순위에 따라 다릅니다 : 24 시간 후 정확한 실행을 원하는 경우에, delayed_jobs을 선택하면 설정이 같은 레일 방법을 실행하는 크론 작업을 할 수있다. Cron 솔루션은 유지하기가 쉽지만 초기 또는 늦게 값을 줄이는 결과가 발생할 수 있습니다 (사용자가 오후 11시와 1 시간 후에 생성 된 후 Cron 작업이 값을 처음으로 제거하는 경우).
지연된 작업 사용을 고려하십시오. https://github.com/collectiveidea/delayed_job – shivam
값이 정확히 24 시간 후에 얼마나 중요한지, 나중에 한 시간이 지나면 문제가 있습니까? 데이터베이스에 저장된 업데이트 된 값이 필요합니까, 아니면 누군가가 값을 읽었을 때 값이 계산되면 충분합니까? – spickermann
@spickermann 저는 모든 사용자가 동일한 일정 비율로 감가 상각하기를 바랍니다. 따라서 모든 사용자에게 동일하거나 거의 동일한 간격을 유지하는 한 실제로는 문제가되지 않는 하루 이상 또는 하루 미만이 걸릴 수 있습니다. 예, 업데이트 된 값은 데이터베이스에 저장되어야합니다. –