Rails 4 Friendly Id Slug не обновляет
Я использую следующее:
gem 'friendly_id', github: 'FriendlyId/friendly_id', branch: 'master'
Я создаю раздел статьи на моем веб-сайте Rails 4. Проблема, с которой я столкнулась, заключается в том, что когда я изменяю существующее имя статьи, slug не обновляется.
Это то, что у меня есть до сих пор:
extend FriendlyId
friendly_id :name, use: :slugged
add_column :articles, :slug, :string
add_index :articles, :slug, unique: true
Ответы
Ответ 1
В FriendlyId 4 (совместим с Rails 3) существует метод
should_generate_new_friendly_id?
и вы можете определить его на своей модели для контроля при восстановлении слизняков.
Попробуйте
def should_generate_new_friendly_id?
name_changed?
end
для восстановления пули при изменении имени.
ИЗМЕНИТЬ
FriendlyId версия 5 (совместимая с Rails 4) не восстанавливает пули при сохранении больше. Чтобы восстановить эту функциональность, вы можете установить столбец slug на nil
перед сохранением или использовать указанное выше решение.
Ответ 2
У меня есть эти проблемы и просто хочу указать, что я заметил.
если вы делаете это только как в документах
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
end
а затем запустите Post.find_each(&:save)
- slug будет обновляться...
Однако в моем случае у меня также есть их в моей модели
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
def normalize_friendly_id(text)
text.to_slug.normalize(transliterations: :russian).to_s
end
def should_generate_new_friendly_id?
title_changed?
end
end
с приведенным выше кодом он ничего не сделает, когда вы запустите Post.find_each(&:save)
Я предполагаю, так как ваш заголовок не изменяется. (первый метод обрабатывает русский язык)
поэтому при работе с первой моделью все отлично поработало, но затем, когда я скопировал готовый код в следующую модель, я захотел уклониться, я столкнулся с некоторыми проблемами. Надеюсь, это поможет кому-то.