friendly_id и act_as_paranoid создают дубликаты слагов

В настоящее время я использую act_as_paranoid и friendly_id (5.0.1) для модели, и когда я уничтожаю модель и пытаюсь создать новую, которая будет генерировать тот же слаг, я получаю:

ERROR:  duplicate key value violates unique constraint "index_papers_on_slug"

Мне нужно каким-то образом получить код, который проверяет, существует ли слаг в рамках всех объектов, а не только неудаленных.

Как я могу заставить friendly_id использовать with_deleted при проверке, существует ли уже слаг. Я должен отметить, что я также использую историю слагов, что может еще больше усложнить ситуацию.

Копнув глубже, я понял, что, поскольку я использую историю, слаг полностью удаляется, а объект просто удаляется:

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

Итак, мне просто нужно выяснить, как предотвратить это, и я должен быть в порядке, поскольку похоже, что сам код friendly_id уже использует unscoped при попытке найти допустимый слаг.


person Lindsey B    schedule 13.02.2014    source источник


Ответы (2)


В Friendly_id есть модуль под названием scoped, который позволяет генерировать уникальные слаги в области видимости. Так что, наверное

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

решит проблему.

person bredikhin    schedule 13.02.2014
comment
Это вызывает следующую ошибку: undefined method unscoped for Paper - person Lindsey B; 13.02.2014
comment
Хм, вы можете попробовать создать область-оболочку, вызывающую unscoped внутри нее? - person bredikhin; 13.02.2014
comment
Проблема, по-видимому, заключается в том, что области дружественных_идентификаций ожидают, что они охватывают другие свойства объекта и не обязательно устанавливают область поиска, поэтому, когда я создал новый метод, он жалуется, что столбец без области не существует. - person Lindsey B; 13.02.2014

Добавление следующего к модели позволило мне переопределить зависимое уничтожение слагов.

def has_many_dependent_for_slugs; end

Решение взято из комментария к этой проблеме с github.

person Lindsey B    schedule 13.02.2014