使用friendly_id一段时间后启用历史记录

时间:2014-03-24 17:20:21

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

我正在尝试将history添加到现有的生产网站。之前我没有生成friendly_id迁移,所以在添加它并将use: :sluggable更改为use: [:sluggable, :history]到我的模型之后,Model.friendly.find...的能力在模型之前的模型中消失了.save做了这个改变。

解决这个问题的最佳方法是什么。在迁移过程中,我是否应该遍历模型中的每条记录并# Added this to friendly_id migration class CreateFriendlyIdSlugs < ActiveRecord::Migration def up Model.all.each do |m| m.save end end end ?这就是我到目前为止所做的一切。不确定这是否有效,但必须有更好的方法。

更新

我在原始问题中提到的是我如何去做。这看起来很笨拙,但确实有效。如果有人在场,我仍然会喜欢更好的答案。

{{1}}

1 个答案:

答案 0 :(得分:1)

这应该适用于mysql和postgresql(它没有INSERT IGNORE)

def up
  execute <<-SQL
    INSERT INTO friendly_id_slugs
      (slug, sluggable_id, sluggable_type, created_at)
    SELECT m.slug, m.id, 'Model', NOW()
    FROM models m
    LEFT OUTER JOIN friendly_id_slugs f ON f.sluggable_id = m.id
    WHERE m.slug IS NOT NULL AND LENGTH(m.slug) > 0 AND f.id IS NULL
  SQL
end