上下文非常简单,我有一个从FriendlyId扩展的课程模型如下:
extend FriendlyId
friendly_id :friendly_name, use: [:slugged, :history]
def friendly_name
slugs = [self.type_name, self.name]
slugs << self.city.name if self.city
slugs << self.structure.name if self.structure
return slugs
end
如果我创建一个类型,名称,城市和结构相同的课程,我会收到以下错误:
!! #<ActiveRecord::RecordNotUnique: PG::Error: ERROR: duplicate key value
violates unique constraint "index_courses_on_slug"
DETAIL: Key (slug)=(cours-sevillanas-copie-paris-12-la-trianera) already exists.
我不明白为什么FriendlyId不会在slug的末尾添加一个序列号... 欢迎提出任何建议。
我试图在friendly_name方法中返回一个字符串而不是一个数组,但错误仍然存在。
修改
删除:历史记录修复了问题。
我还尝试了其他支持(4.0-stable,4.1.x)的FriendlyId,但它没有解决问题。
答案 0 :(得分:2)
我遇到了同样的问题:历史记录功能:因为FriendlyId会使用一个单独的表来存储slug,而不会检查现有的slug列。
您可以创建迁移并重新保存整个表,以在新的slugs表中生成丢失的slug。
例如:
def up
MyModel.all.map(&:save)
end