使用UUID的Friendly_id gem尽管被覆盖了

时间:2017-02-10 01:30:06

标签: ruby-on-rails friendly-id

我有一个模型,并且按照friendly_id gem看起来像这样:

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'变成一个slu ::'2000'和2000-2 ......以避免碰撞。

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

我在我的应用程序中使用另一个模型的friendly_id,并使用相同的技术,并且它的工作完美。任何帮助或建议,为什么这不起作用将非常感激。

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

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我首先通过删除所有slug值然后重新运行我的保存解决了这个问题。

###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)

希望它有所帮助。