Friendly_id 和acts_as_paranoid 创建重复的slugs

Lin*_*y B 5 ruby-on-rails friendly-id acts-as-paranoid

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

ERROR:  duplicate key value violates unique constraint "index_papers_on_slug"
Run Code Online (Sandbox Code Playgroud)

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

with_deleted在检查 slug 是否已存在时,如何获取要使用的Friendly_id 。我应该指出,我还使用了 slug 历史记录,这可能会使事情进一步复杂化。

深入挖掘后,我意识到,由于我使用的是历史记录,因此 slug 已被完全删除,而对象只是被软删除:

DELETE FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."id" = $1  [["id", 9423]]
Run Code Online (Sandbox Code Playgroud)

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

Lin*_*y B 3

将以下内容添加到模型中使我能够覆盖 slugs 上的依赖销毁

def has_many_dependent_for_slugs; end
Run Code Online (Sandbox Code Playgroud)

解决方案来自这个github问题的评论。