2015-05-11 42 views
0

我正在將一個非常舊的應用從friendly_id 3.2遷移到5.1。舊版友好ID的數據遷移

我有一個用戶模型,當前有一個字段。我創建了一個名爲slug的新字段。最初,我想我可能只是數據在從cached_slug複製到一決高下,但我注意到,也有被稱爲蛞蝓完全是另外一個表,看起來像這樣:

create_table "slugs", force: :cascade do |t| 
    t.string "name",   limit: 255 
    t.integer "sluggable_id" 
    t.integer "sequence",     default: 1, null: false 
    t.string "sluggable_type", limit: 40 
    t.string "scope",   limit: 255 
    t.datetime "created_at" 
    end 

繼在FriendlyID README的方向爲Rails的快速入門,我跑rails generate friendly_id這創造了這個表:

create_table "friendly_id_slugs", force: :cascade do |t| 
    t.string "slug",      null: false 
    t.integer "sluggable_id",    null: false 
    t.string "sluggable_type", limit: 50 
    t.string "scope" 
    t.datetime "created_at" 
    end 

所以我現在都搞不清什麼,我需要做什麼來完成遷移。我試圖用控制檯創建一個新用戶,並且friendly_id_slugs表仍然是空的,所以我不確定它何時或用了什麼。

我有兩個問題: 1)什麼是用於該另一個表 2)什麼我需要做的遷移我的老蛞蝓到新表/字段,以便其將繼續努力前進?

謝謝!

回答

1

如果你不介意失去FriendlyId's History記錄(即:老蛞蝓),

  1. 刪除舊slug表中軌控制檯
  2. ,運行<ModelName>.find_each(&:save)所有friendly_id車型。

第2步應該重新生成新的slu。。

警告:在生產服務器上執行此操作之前進行測試!

更新:您也可以執行步驟2中的遷移文件

class RegenerateSlugs < ActiveRecord::Migration 
    def change 
     # <ModelName>.find_each(&:save) 
     User.find_each(&:save) 
     Article.find_each(&:save) 
    end 
end 
+0

我想保留老蛞蝓的搜索引擎優化的原因。它通過本週末的一些源代碼閱讀,看起來我不需要所有額外的表格,除非我想使用:history。所以我可以將舊的cached_slugs複製到新的.slug字段中,我可以使用一些歷史上下文,但這隻佔我用例的很小一部分,所以應該足夠好。謝謝! – Jeff