FriendlyId没有添加序列并抛出ActiveRecord :: RecordNotUnique

时间:2013-06-13 15:32:46

标签: ruby-on-rails activerecord rails-activerecord friendly-id

上下文非常简单,我有一个从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,但它没有解决问题。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题:历史记录功能:因为FriendlyId会使用一个单独的表来存储slug,而不会检查现有的slug列。

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

例如:

def up
  MyModel.all.map(&:save)
end