我有一个模型,并且按照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测试中 - 但我不明白为什么?有什么想法吗?
答案 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)
希望它有所帮助。