norman / friendly_id

FriendlyId is the “Swiss Army bulldozer” of slugging and permalink plugins for ActiveRecord. It allows you to create pretty URL’s and work with human-friendly strings as if they were numeric ids for ActiveRecord models.
http://norman.github.io/friendly_id/
MIT License
6.15k stars 591 forks source link

History module is not compatible with using uuid as ids #969

Open such opened 3 years ago

such commented 3 years ago

When using uuids as id for the friendly_id_slugs table the history can be wrongly considered out of date.

I created the friendly_id_slugs table with create_table :friendly_id_slugs, id: :uuid.

In history.rb, the slugs relationship is defined as:

has_many :slugs, -> {order(id: :desc)}, **{
          :as         => :sluggable,
          :dependent  => @friendly_id_config.dependent_value,
          :class_name => Slug.to_s
        }

In order to find the current slug in history_is_up_to_date?, it uses: latest_history = slugs.first

ordering by id is not compatible with this when ids are uuids.

Potential solution:

Allowing configuration of the ordering key:

has_many :slugs, -> {order(@friendly_id_config.ordering_key => :desc)}, **{
          :as         => :sluggable,
          :dependent  => @friendly_id_config.dependent_value,
          :class_name => Slug.to_s
        }
stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.