friendly_id和acts_as_paranoid创建重复的slu ..

时间:2014-02-13 18:19:13

标签: ruby-on-rails friendly-id acts-as-paranoid

我目前在模型上使用acts_as_paranoid和friendly_id(5.0.1),当我销毁模型并尝试创建一个新的模型时,我会得到相同的模块:

ERROR:  duplicate key value violates unique constraint "index_papers_on_slug"

我需要以某种方式获取检查slug是否已经存在的代码,检查所有对象的范围,而不仅仅是未删除的对象。

在检查slug是否已经存在时,如何让friendly_id使用with_deleted。我应该注意到,我也在使用slug历史,这可能使事情变得更复杂。

在深入挖掘后,我意识到,由于我正在使用历史记录,因此当对象被软删除时,slug被完全删除:

DELETE FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."id" = $1  [["id", 9423]]

所以,我只需要弄清楚如何防止这种情况,我应该没问题,因为在尝试查找有效的slug时,friendly_id代码本身已经在使用unscoped了。

2 个答案:

答案 0 :(得分:2)

Friendly_id有一个名为scoped的模块,允许您在范围内生成唯一的slug。所以,可能

class Paper < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, :use => :scoped, :scope => :unscoped
end

将解决问题。

答案 1 :(得分:1)

将以下内容添加到模型中允许我覆盖slug上的依赖性破坏

def has_many_dependent_for_slugs; end

解决方案来自对此github issue的评论。