Прежде всего, спросите себя: есть ли более простой способ сделать это?Я верю, что есть.Если вы уже готовы добавить номера к своему слагу, как насчет того, чтобы всегда добавлять число, например, идентификатор?
before_validation :generate_slug
private
def generate_slug
self.permalink = "#{self.id}-#{self.name.parameterize}"
end
Это очень надежный способ сделать это, и вы даже можете пропустить слагнепосредственно к методу find
, что означает, что вам вообще не нужно сохранять слаг.
В противном случае вы можете просто проверить, существует ли имя + номер, и увеличить n на 1,затем перепроверьте, пока не найдете бесплатный номер.Обратите внимание, что это может занять некоторое время, если существует много записей с одинаковыми именами.Этот способ также зависит от условий гонки, если два слизняка генерируются одновременно.