Friendly_id gem 使用 UUID 尽管被覆盖

Friendly_id gem using UUIDs despite being overrriden

我有一个模型,按照friendly_idgem看起来是这样的:

class FinancialYear < ApplicationRecord
  extend FriendlyId
  friendly_id :slug_candidates, use: :slugged

  def slug_candidates
    [
        :end_year,
        [:end_year, :max_id]
    ]
  end

  def should_generate_new_friendly_id?
    self.slug.blank? || self.year_changed?
  end

  def end_year
    if !self.year.nil? && self.year.length > 1
      self.year.split('-')[-1].strip
    else
      self.year
    end
  end

  def max_id
    FinancialYear.where(year: end_year).count + 1
  end

end

它应该做的是将年份:'1999-2000' 变成一个 slug:'2000' 和 2000-2...等以避免冲突。

不幸的是,我的测试失败了:“2000”,得到了:“2000-f7608e8b-a2e7-449c-ae54-4785c7a68dec”

我正在我的应用程序的另一个模型上使用 friendly_id 并且我使用的是相同的技术,并且它运行良好。任何关于为什么这不起作用的帮助或建议将不胜感激。

更新 经过更多实验后,我发现这似乎只发生在我的 rspec 测试中 - 但我不明白为什么?有什么想法吗?

我遇到了同样的问题,我通过先 删除 所有 slug 值然后 re-running 我的保存来解决它。

###delete all slug values
 User.update_all(:slug=>nil) 

###re-run to get the new slug candidate affective overriding the default alpanumeric slug
 User.find_each(&:save)

希望对您有所帮助。