Rails: добавить номер в постоянную ссылку, если постоянная ссылка уже занята - PullRequest
2 голосов
/ 10 июля 2011

Я хотел бы дать Джону Доу постоянную ссылку john-doe-2 , если уже есть john-doe -1 . Номер должен быть следующим свободным, который будет добавлен ("john-doe- n ")

В настоящее время мои постоянные ссылки генерируются обычным образом:

before_validation :generate_slug  
private
def generate_slug   
  self.permalink = self.name.parameterize
end

Как реализовать validates_uniqueness_of -подобный метод, который добавляет этот тип чисел к self.permalink , а затем обычно сохраняет пользователя?

1 Ответ

3 голосов
/ 10 июля 2011

Прежде всего, спросите себя: есть ли более простой способ сделать это?Я верю, что есть.Если вы уже готовы добавить номера к своему слагу, как насчет того, чтобы всегда добавлять число, например, идентификатор?

before_validation :generate_slug

private
def generate_slug
  self.permalink = "#{self.id}-#{self.name.parameterize}"
end

Это очень надежный способ сделать это, и вы даже можете пропустить слагнепосредственно к методу find, что означает, что вам вообще не нужно сохранять слаг.

В противном случае вы можете просто проверить, существует ли имя + номер, и увеличить n на 1,затем перепроверьте, пока не найдете бесплатный номер.Обратите внимание, что это может занять некоторое время, если существует много записей с одинаковыми именами.Этот способ также зависит от условий гонки, если два слизняка генерируются одновременно.

...