Подтвердить что ты не робот

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
4b9b3361

Ответ 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) Я предполагаю, так как ваш заголовок не изменяется. (первый метод обрабатывает русский язык)

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