Rails 4友好Id Slug没有更新

我正在使用以下内容:

gem 'friendly_id', github: 'FriendlyId/friendly_id', branch: 'master' 

我正在我的Rails 4网站上创建一篇文章部分。 我遇到的问题是,当我更改现有文章的名称时,slug不会更新。

这是我到目前为止:

 extend FriendlyId friendly_id :name, use: :slugged add_column :articles, :slug, :string add_index :articles, :slug, unique: true 

在FriendlyId 4(兼容Rails 3)中有一种方法

 should_generate_new_friendly_id? 

并且您可以在模型上定义它以控制何时重生slug。 尝试

 def should_generate_new_friendly_id? name_changed? end 

名称更改时重新生成slug。

编辑

FriendlyId版本5(Rails 4兼容)不再重新保存slug。 要恢复此function,您可以在保存或使用上面提供的解决方案之前将slug列设置为nil

编辑2

您需要覆盖您的保存的slug setter,以便在本期中引用的Rails <5和FriendlyId> 5中工作。

将其添加到模型文件中

  def slug=(value) if value.present? write_attribute(:slug, value) end end 

我有这个问题,只是想指出我注意到的。

如果你只在文档中做

 class Post < ActiveRecord::Base extend FriendlyId friendly_id :title, use: :slugged end 

然后运行Post.find_each(&:save) - slug会更新......

但就我而言,我的模型中也有这些

 class Post < ActiveRecord::Base extend FriendlyId friendly_id :title, use: :slugged def normalize_friendly_id(text) text.to_slug.normalize(transliterations: :russian).to_s end def should_generate_new_friendly_id? title_changed? end end 

使用上面的代码,当你运行Post.find_each(&:save)时它不会做任何事情我假设你的标题没有改变。 (第一种方法处理俄语)

因此,当使用第一个模型时,所有工作都很好,但是当我将准备好的代码复制到下一个模型时,我想要进行重击,我遇到了一些问题。 希望它可以帮到某人。