【问题标题】:FriendlyId not adding sequence and throwing ActiveRecord::RecordNotUniqueFriendlyId 不添加序列并抛出 ActiveRecord::RecordNotUnique
【发布时间】:2013-06-10 01:54:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多