上下文非常简单,我有一个从FriendlyId扩展的类(class)模型,如下所示:
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
如果我创建具有相同类型、名称、城市和结构的类(class),则会收到以下错误:
!! #<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),但它没有解决问题。
最佳答案
我在 :history 功能上遇到了同样的问题:这是因为FriendlyId将使用单独的表来存储slugs,并且不会检查现有的slug列。
您可以创建迁移并重新保存整个表,以在新的 slugs 表中生成缺失的 slugs。
例如:
def up
MyModel.all.map(&:save)
end
关于ruby-on-rails - FriendlyId 不添加序列并抛出 ActiveRecord::RecordNotUnique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091148/