Нужно обновить friendly_id вручную
У меня есть фото по URL:
www.mysite.com/here-is-my-url
Я создал замену для этой фотографии, но хочу, чтобы старый URL указывал на новый ресурс. Т.е. новый ресурс www.mysite.com/new-url, но я хочу, чтобы URL был www.mysite.com/here-is-my-url, а для старого ресурса я хочу изменить его на что-то совсем другое.
Я знаю, что лучше не возиться вручную со слагами friendly_id, НО это аварийная разовая вещь, и я пытаюсь найти самый безболезненный способ сделать это (желательно через консоль).
Какие-нибудь мысли? Мне в основном нужен доступ к таблице friendly_id_slugs через консоль, но я получаю неинициализированную постоянную ошибку, когда пытаюсь сделать FriendlyIdSlug.all .
3 ответа
def should_generate_new_friendly_id?
slug.blank? || name_changed?
end
добавьте это к вашей модели. name_change?
должно быть [whatever your column is that decides the slug]_changed?
Есть способ сделать это через консоль. У меня есть сайт, который мне нужен, чтобы обновить один дружественный идентификатор, потому что мы продвигали URL-адрес с напечатанными листовками. Архаичный, да, я знаю. Попробуй это:
Model.all (find to find the id of the slug you'd like to change)
u = Model.find(id) (integer of the id you'd like to change)
u.slug = nil
u.slug = 'slug-of-your-choice'
u.update_attribute(:slug, 'slug-of-your-choice')
Теперь, если вы проверите Model.all, вы увидите свой объект Model с обновленным вручную слагом. Также проверено на живом сайте. Использование u.save после обновления пули не работает для меня. Кроме того, стиль update_attribute, используемый здесь, является Rails 3, поэтому используйте Rails 4 синтаксис для Rails 4.
Обычно нет FriendlyIdSlug
модель / таблица, поэтому получение неинициализированной постоянной ошибки на FriendlyIdSlug.all
вроде нормально.
Когда вы добавляете friendly_id
к ресурсу, он просто добавляет slug
поле, которое восстанавливается на основе указанного поля (title
в вашем случае) всякий раз, когда он пуст. Если стандартная процедура генерации пули дает вам пуля, который не является уникальным в соответствующей таблице, friendly_id
изменяет это, добавляя --n
(n
целое число), пока оно не станет уникальным.
Тем не менее, чтобы решить вашу ситуацию, вы должны
- Измените название старого объекта, установите его слаг
nil
, спасти. - Установите слаг нового объекта на
nil
, спасти. - Измените название старого объекта обратно, если это необходимо.
Например, если ваша модель Photo
, это будет что-то вроде этого в вашей консоли:
old = Photo.find('here-is-my-url')
new = Photo.find('here-is-my-url--2')
old.title = 'Here is my OLD URL'
old.slug = nil
old.save
new.slug = nil
new.save