2014-01-24 107 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語法。