旧版友好ID

时间:2015-05-11 01:41:02

标签: ruby-on-rails ruby friendly-id

我正在将一个非常旧的应用程序从friendly_id 3.2迁移到5.1。

我有一个目前有cached_slug字段的用户模型。我创建了一个名为slug的新字段。最初,我以为我可以将数据从cached_slug复制到slug,但我注意到还有一个名为slugs的整个表,看起来像这样:

  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

按照Rails快速入门的FriendlyID README中的说明,我运行了创建此表的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)我需要做些什么才能将旧的slugs迁移到新的表/字段,以便它继续向前发展?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您不介意丢失FriendlyId's History记录(即:旧的slu),

  1. 删除旧slug
  2. 在rails控制台中,
  3. 为所有friendly_id模型运行<ModelName>.find_each(&:save)
  4. 步骤2应该重新生成新的slu ..

    警告:在生产服务器上执行此操作前进行测试!

    更新:您还可以在迁移文件中执行第2步

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