Как автоматически изменить значение атрибута через определенное время - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я создаю приложение аукциона, и мне трудно понять, как изменить значение аукциона в определенное время. Это модель для класса аукциона

#  id                 :bigint           not null, primary key
#  active             :integer          default(1)
#  auction_end_time   :datetime
#  auction_start_time :datetime
#  category           :string
#  current_price      :float
#  description        :text
#  highest_bid        :float
#  highest_bidder     :string
#  name               :string
#  seller             :string
#  created_at         :datetime         not null
#  updated_at         :datetime         not null
#  user_id            :bigint

Когда на аукционе_end_time проходит текущее время (Time.new.ut c), я хочу изменить атрибут 'active' на значение '0' для ложный. 'active' ограничен значениями 0 и 1 для true и false.

1 Ответ

0 голосов
/ 28 апреля 2020

Когда active имеет только два состояния - true и false, и когда это состояние зависит только от того, прошел ли auction_end_time, тогда вам вообще не нужен этот столбец.

Кому найти все active аукцион, вы можете использовать область видимости, подобную этой:

scope :active, -> { where('auction_end_time > ?', Time.new.utc)

, и для запроса, если аукцион все еще active, вы можете использовать метод, подобный этому:

def active?
  auction_end_time > Time.new.utc
end

Другие подходы - такие как задания CRON или фоновый работник - не будут такими надежными, потому что они могут работать на несколько секунд слишком поздно или вообще не работать, если система подстилающих устройств не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...