4

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

ERROR:  duplicate key value violates unique constraint "index_papers_on_slug"

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

with_deleted在检查 slug 是否已经存在时,我如何才能使用友好ID。我应该注意,我也在使用 slug 历史,这可能会使事情进一步复杂化。

深入挖掘后,我意识到由于我使用的是历史记录,所以当对象只是被软删除时,slug 被完全删除:

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

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

4

2 回答 2

2

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

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

将解决问题。

于 2014-02-13T19:02:58.173 回答
1

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

def has_many_dependent_for_slugs; end

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

于 2014-02-13T20:51:12.370 回答