Используйте идентификатор внутри слага при использовании FriendlyID
Внутри моей модели у меня есть следующее:
friendly_id :id_and_title, use: [:slugged, :finders]
...
def id_and_title
"#{self.id}-#{self.title}"[0,100]
end
Однако при создании новой записи ID
не используется на поле слизняка.
Что я сейчас делаю:
after_save :regenerate_slug
...
def regenerate_slug
self.slug = nil
self.save
end
и мне интересно, есть ли другой способ сделать это?
1 ответ
Таким образом, проблема в том, что friendly_id не имеет доступа к "id" до тех пор, пока запись не будет создана. Проблема здесь в том, что after_save вызывает бесконечное повторение, как сказал Михал, так как он вызывает save.
Вместо этого вы должны использовать after_create. Вам нужно сделать это только один раз. Во всех последующих обновлениях записи идентификатор должен быть доступен для friendly_id.
@ user3062913 имеет решение для этого здесь: Rails4 Friendly_id Уникальное форматирование слаг