2

上下文非常简单,我有一个从 FriendlyId 扩展的 Course 模型,如下所示:

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 方法中返回一个字符串而不是一个数组,但错误仍然存​​在。

编辑

删除 :history 解决了这个问题。

我也尝试过 FriendlyId 的其他分支(4.0-stable、4.1.x),但它不能解决问题。

4

1 回答 1

2

我对 :history 功能有同样的问题:这是因为 FriendlyId 将使用单独的表来存储 slug,并且不会检查现有的 slug 列。

您可以创建迁移并重新保存整个表以在新的 slugs 表中生成缺少的 slug。

例如:

def up
  MyModel.all.map(&:save)
end
于 2013-09-10T10:44:47.083 回答