2014-01-24 76 views
2

我在URL中的照片:需要更新friendly_id手动

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

我已经创造了这张照片的替代品,但我想老指向新资源的网址。即新资源是www.mysite.com/new-url,但我希望网址为www.mysite.com/here-is-my-url,对于旧资源,我想将其更改为其他内容。

我知道最好不要手动摆弄friendly_id slu,,但这是一种紧急的一次性类型的事情,我试图找出最无痛的方式来做到这一点(最好通过控制台)。

有什么想法?我基本上需要通过控制台访问friendly_id_slugs表,但是当我尝试使用FriendlyIdSlug.all时,我得到一个未初始化的常量错误。

+0

friendly_id处理开箱即用的历史记录 – apneadiving

+0

我不确定我是否理解。 slu are是由标题栏生成的。我将这些slu set设置为无照片,标题为第二张照片为“这是我的网址”并保存了照片(全部通过控制台)。生成的slu is是“这是我的网址 - 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上获得未初始化的常量错误是好的。

当您将friendly_id添加到资源时,它只会添加一个slug字段,该字段在空白时会根据指定字段(您的情况为title)重新生成。如果标准slu generation生成过程给了您一个在相应表格中不是唯一的slu,,friendly_id通过向其添加--nn整数)来改变它,直到它变得唯一。

这就是说,为了解决你的情况,你必须

  1. 改变旧对象的标题,它的蛞蝓设置为nil,保存。
  2. 设置新对象的slu to为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

所以即使不幸的是也没有清除前一个slug的friendly_id_slugs表。所以生成的slu has有--2附加。将编辑您的回复,以包括下一步! –

+0

@RingoBlancke好吧,你是如何设置你的'friendly_id'的?如果可能的话,从模型和'config/routes.rb'中发布相应的代码片段。 – bredikhin

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对象带有手动更新的slu。。还在现场进行测试。 更新slu Using后使用u.save不适合我。 此外,此处使用的update_attribute样式是Rails 3,因此使用Rails 4的Rails 4语法。