Используйте идентификатор внутри slug при использовании FriendlyID

Внутри моей модели у меня есть следующее:

friendly_id :id_and_title, use: [:slugged, :finders]

...

def id_and_title
    "#{self.id}-#{self.title}"[0,100]
end

Однако при создании новой записи ID не используется в поле slug.

Что я сейчас делаю:

after_save :regenerate_slug

...

def regenerate_slug
    self.slug = nil
    self.save
end

и мне интересно, есть ли другой способ сделать это?


person Oscar Mederos    schedule 25.09.2014    source источник
comment
Ваш метод регенерации слагов может привести к бесконечному повторению, вы должны изменить его.   -  person Mike Szyndel    schedule 25.09.2014
comment
Что произойдет прямо сейчас, если вы запустите этот код?   -  person Mike Szyndel    schedule 25.09.2014


Ответы (1)


Итак, проблема в том, что friendly_id не имеет доступа к «id» до тех пор, пока запись не будет создана. Проблема здесь в том, что after_save вызывает бесконечное повторение, как сказал Михал, поскольку вызывает save.

Вместо этого вы должны использовать after_create. Вам нужно сделать это только один раз. Во всех последующих обновлениях записи этот идентификатор должен быть доступен для использования friendly_id.

У @user3062913 есть решение для этого здесь: Rails4 Friendly_id Unique Slug Formatting

person Han Chen    schedule 05.12.2014
comment
Кстати, ваш вопрос помог мне решить эту проблему, когда у меня была такая же проблема, так что спасибо! - person Han Chen; 05.12.2014