У меня есть метод в моей пробной модели, который принимает последние две цифры season_year
и объединяет уникальное число в конце, сгенерированное методом подсчета.
Все работает отлично и отлично, кроме случаев, когдаЯ удаляю предыдущую запись.
Например: скажем, я создал 1800, 1801 и 1802. Когда я удаляю 1800 и пытаюсь создать новую запись, я получаю следующую ошибку.
CACHE (0.0ms) SELECT COUNT(*) FROM "trials" WHERE "trials"."season_year" BETWEEN $1 AND $2 [["season_year", "2018-01-01"], ["season_year", "2018-12-31"]]
CACHE Trial Exists (0.0ms) SELECT 1 AS one FROM "trials" WHERE "trials"."trial_number" = $1 LIMIT $2 [["trial_number", 1802], ["LIMIT", 1]]
По какой-то причине он продолжает повторять вышесказанное.
Какой мой желаемый результат для него - проверить, существует ли число, переходит ли оно к следующему, но по какой-то причине оно не работает, когдапредыдущая запись удаляется.
Я бы хотел, чтобы каждый раз начиналось с 00, чтобы проверить, использовалось ли число.если есть, переходите к следующему.то есть.01
Модель
class Trial < ApplicationRecord
before_create :create_trial_number
def count_records_from_same_year
self.class.where(season_year: (season_year.beginning_of_year..season_year.end_of_year)).count
end
def create_trial_number
loop do
year = (season_year).strftime("%y")
self.trial_number = year.concat(sprintf '%02d', count_records_from_same_year)
break unless self.class.where(trial_number: self.trial_number).exists?
end
end
end