重复的友好 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_column
,because it will not trigger the callbacks, validations and such,因此,friendly_id 不会更新您的 slug。更新模型 object 属性并改为调用 .save
。
此外,您可以在更新常规记录后更新其他记录(在 after_save
回调中)- 在那里您可以访问原始标题和新标题,而无需执行额外操作 Post.find(self.id)
假设我们有 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_column
,because it will not trigger the callbacks, validations and such,因此,friendly_id 不会更新您的 slug。更新模型 object 属性并改为调用 .save
。
此外,您可以在更新常规记录后更新其他记录(在 after_save
回调中)- 在那里您可以访问原始标题和新标题,而无需执行额外操作 Post.find(self.id)