我们说我们有2个帖子标题相同:"超级英雄"。第一个帖子应该有url superheros-alternative-1,第二个帖子应该有superheros-alternative-2。 问题是,当我更新其中一个帖子的标题时,网址应该更改为两个。我的意思是,如果我将标题更改为" marvel",那么网址应该成为以下内容 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
答案 0 :(得分:1)
你不应该使用update_column
,because it will not trigger the callbacks, validations and such,所以,friendly_id不会更新你的slug。更新模型对象属性并改为调用.save
。
此外,您可以在更新常规记录后更新其他记录(在after_save
回调中) - 您可以访问原始标题和新标题,而无需执行其他Post.find(self.id)