Рельсы цикла - PullRequest
       2

Рельсы цикла

0 голосов
/ 15 октября 2018

У меня есть метод в моей пробной модели, который принимает последние две цифры 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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Ваш метод создания уникального идентификатора для испытания крайне неэффективен.

Вы можете использовать идентификатор из таблицы trials в качестве уникального идентификатора для отдельного испытания.

В качестве альтернативы вы можете разрешить базе данных создавать автоматически увеличивающийся столбец.MySQL использует ключевое слово AUTO_INCREMENT , Postgres использует концепцию последовательностей.

0 голосов
/ 15 октября 2018

Похоже, что код, который вы опубликовали, изменяет любое значение для продвижения цикла?Я предполагаю, что вам нужно добавить self.season_year += 1 до конца блока, чтобы достичь своей цели.

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