ruby-on-railsfriendly-id

Rails 4 Friendly Id Slug Not Updating


I'm using the following:

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

I am creating an Article section on my Rails 4 website. The problem I am having is that when I change a existing article's name the slug is not updated.

This is what I have so far:

extend FriendlyId
friendly_id :name, use: :slugged

add_column :articles, :slug, :string
add_index :articles, :slug, unique: true

Solution

  • In FriendlyId 4 (Rails 3 compatible) there was a method

    should_generate_new_friendly_id?
    

    and you could define it on your model to control when slug is regenerated. Try

    def should_generate_new_friendly_id?
      name_changed?
    end
    

    to regenerate slug when name changes.

    EDIT

    FriendlyId version 5 (Rails 4 compatible) doesn't regenerate slugs on save anymore. To restore this functionality you can either set slug column to nil before saving or use the solution provided above.

    EDIT 2

    You need to override the slug setter for your saves to work for Rails <5 & FriendlyId > 5 as referenced in this issue.

    Add this to the model file

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