重复的友好ID

时间:2015-01-13 08:55:03

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

我们说我们有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

1 个答案:

答案 0 :(得分:1)

你不应该使用update_columnbecause it will not trigger the callbacks, validations and such,所以,friendly_id不会更新你的slug。更新模型对象属性并改为调用.save

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