Используйте идентификатор внутри слага при использовании 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 Уникальное форматирование слаг

Другие вопросы по тегам