2015-05-11 105 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