我在网址上有一张照片:
www.mysite.com/here-is-my-url
我已经为这张照片创建了一个替代品,但我希望旧网址指向新资源。即新资源是www.mysite.com/new-url,但我希望URL为www.mysite.com/here-is-my-url,对于旧资源,我想将其更改为其他内容。< / p>
我知道最好不要手动操作friendly_id slugs,但这是一个紧急的一次性类型的东西,我试图找出最轻松的方式(最好通过控制台)。
有什么想法?我基本上需要通过控制台访问friendly_id_slugs表,但是当我尝试使用FriendlyIdSlug.all时,我得到了一个未初始化的常量错误。
答案 0 :(得分:2)
def should_generate_new_friendly_id?
slug.blank? || name_changed?
end
将其添加到您的模型中。 name_change?
应为[whatever your column is that decides the slug]_changed?
答案 1 :(得分:0)
通常情况下,没有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
答案 2 :(得分:0)
有一种方法可以通过控制台执行此操作。我有一个生产网站,我需要更新一个friendly-id slug,因为我们一直在推广带有印刷传单的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对象带有手动更新的slug。也在现场测试。 更新slug后使用u.save对我不起作用。 此外,此处使用的update_attribute样式是Rails 3,因此对Rails 4使用Rails 4语法。