@vanderv
Ruby on Rails

[Rails] Как организовать ежемесячное выставление счета?

Мне необходимо ежемесячно на сайте выставлять счет пользователю, который формируется исходя из параметров которые он выставил. Пока кроме крона ничего в голову не приходит. Но на мой взгляд это костыль, должен быть лучше вариант. Если кто-то сталкивался с такой задачей, как вы её организовали?
P.s. Пишу на руби с рельсами, хотя в данном случае это наверное не имеет значения.
  • Вопрос задан
  • 2410 просмотров
Пригласить эксперта
Ответы на вопрос 4
Dimitriys
@Dimitriys
Раз в сутки в 00:01 запускайте cron который будет формировать счета для всех пользователей.
Все остальное от лукавого :)

Можно конечно при входе пользователя в личный кабинет первым делом проверять есть ли счет, если счета нет - создавать.
select `id` from `bill` where `user_id`=123 and `time_create`>now() - interval 1 month and `payd`='n'  limit 1;

если id > 0 счет найден, показываем его пользователю и подсвечиваем что есть неоплаченный счет.
если id = 0 нет счета, создаем.
Ответ написан
FanKiLL
@FanKiLL
before_action :update_last_seen

def update_last_seen
  if current_user
    if (Time.now - 3.hours) >= current_user.last_seen
      current_user.last_seen = Time.now
    current_user.save
  end
end


Вот так у меня в одном проекте проверялось и обновлялось когда последний раз человек был на
сайте, точность важна не была, поэтому + 3 часа Time.now - 3.hours
Но вы можете поменять на день и т.д. Но это сработает только если человек заходит на сайт.
Повесить этот before_action в ApplicationController и при загрузки любой страницы, будут запускаться этот метод.
Ответ написан
Комментировать
@Rigorbb
Как мне кажется, крон вполне хороший вариант. Используйте гем https://github.com/javan/whenever

И в расписание просто укажите

every :month do 
  runner "User.set_bill" # метод выставления счета для пользователей по вашим параметрам
end
Ответ написан
Комментировать
@Renius
дурак восторженный
mperham.github.io/sidekiq
https://github.com/tobiassvn/sidetiq

class MyWorker
  include Sidekiq::Worker
  include Sidetiq::Schedulable

  recurrence { monthly }

  def perform
    # do stuff ...
  end
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы