重复的友好 ID

Friendly ID for duplicates

假设我们有 2 个 post 具有相同的标题:"superheros"。第一个 post 应该有 url superheros-alternative-1,第二个应该有 superheros-alternative-2。 问题是,当我更新其中一个 post 的标题时,它们的 url 都应该更改。我的意思是,如果我将标题更改为 "marvel",那么 url 应该变为以下内容 marvel-alternative-1 和 marvel-alternative-2。 现在我有了下一个代码

class Post < ActiveRecord::Base

  before_update :update_slug

  def should_generate_new_friendly_id?
    slug.blank? || title_changed?
  end

  def update_slug
    title = Post.find(self.id).title
    Post.where(title:title).each do |post|
      post.update_column(:title,self.title)
    end
  end
end

您不应该为此使用 update_columnbecause it will not trigger the callbacks, validations and such,因此,friendly_id 不会更新您的 slug。更新模型 object 属性并改为调用 .save

此外,您可以在更新常规记录后更新其他记录(在 after_save 回调中)- 在那里您可以访问原始标题和新标题,而无需执行额外操作 Post.find(self.id)