2014-01-24 4 views
2

У меня есть фото на URL:Необходимо обновить friendly_id вручную

www.mysite.com/here-is-my-url

Я создал замену для этой фотографии, но я хочу старый url, чтобы указать на новый ресурс. То есть новый ресурс www.mysite.com/new-url, но я хочу, чтобы URL-адрес был www.mysite.com/here-is-my-url и для старого ресурса, я хочу изменить его на что-то еще совсем.

Я знаю, что лучше не русифицировать вручную с помощью дружественных пулей, НО это случайная одноразовая вещь, и я пытаюсь выяснить самый безболезненный способ сделать это (желательно через консоль).

Любые мысли? Мне в основном нужен доступ к таблице friendly_id_slugs через консоль, но я получаю неинициализированную постоянную ошибку, когда пытаюсь сделать FriendlyIdSlug.all.

+0

friendly_id обрабатывает историю из коробки – apneadiving

+0

Я не уверен, что понимаю. Пули генерируются полем заголовка. Я установил пули на ноль для обеих фотографий, назвал вторую фотографию «Вот мой URL» и сохранил фотографию (все через консоль). Сгенерированный слизень «here-is-my-url-2». –

ответ

2
def should_generate_new_friendly_id? 
    slug.blank? || name_changed? 
end 

добавьте это в свою модель. name_change? должен быть [whatever your column is that decides the slug]_changed?

0

Обычно нет FriendlyIdSlug модели/таблицы, поэтому получать неинициализированную постоянную ошибку на FriendlyIdSlug.all вроде Ok.

При добавлении friendly_id к ресурсу, он просто добавляет slug поле, который регенерируется на основе указанного поля (title в вашем случае), когда это поле пустым. Если стандартная процедура генерации пули дает вам слизню, которая не уникальна в соответствующей таблице, friendly_id изменяет ее, добавляя к ней --n (n целое число), пока она не станет уникальной.

Тем не менее, для того, чтобы разрешить ситуацию, вы должны

  1. Изменить название старого объекта, установите его в слизняка nil, сохранить.
  2. Установите пулю нового объекта на nil, сохраните.
  3. При необходимости измените заголовок старого объекта.

Например, если ваша модель 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 
+0

, так что даже это, к сожалению, не очищает таблицу friendly_id_slugs предыдущего пула. поэтому сгенерированная пуля имеет -2. чтобы изменить ваш ответ, чтобы включить следующие шаги! –

+0

@RingoBlancke Хорошо, как вы настроили свой «friendly_id»? Отправьте соответствующие фрагменты кода из вашей модели и «config/routes.rb», если это возможно. – bredikhin

0

Существует способ сделать это через консоль. У меня есть сайт, на котором мне нужно было обновить один дружный идентификатор, потому что мы продвигали 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.

Смежные вопросы