Паранойя с принадлежа
В моем приложении пользователь has_many :jobs
и работа belongs_to :user
, Я использую драгоценный камень паранойи, чтобы мягко удалять пользователей и рабочие места.
Допустим, у меня есть пользователь, Джо, и у него есть задание "Сдвиг изменений". Я могу видеть все вакансии на моей странице листинга, используя Job.all
, но как только я удаляю учетную запись Джо, я не вижу работу, используя Job.all
больше.
Я пытался использовать Job.with_deleted.all
а также пытался разобрать ассоциацию belongs_to :user, -> { with_deleted }
,
SQL-оператор производит:
SELECT "jobs".* FROM "jobs" INNER JOIN "users" ON "users"."id" = "jobs"."user_id" AND "users"."deleted_at" IS NULL WHERE "jobs"."deleted_at" IS NULL ORDER BY users.name ASC
3 ответа
Я знаю, может быть, уже слишком поздно, чтобы ответить на этот вопрос, но из моего опыта. Добавление include Mongoid::Paranoia
к модели Job добавим deleted_at
ассоциации вместо того, чтобы действительно удалять записи о работе. Кроме того, если вы хотите запросить удаленные задания, попробуйте использовать Job.unscoped.all
или если хотите получить удаленное User
из экземпляра задания попробуйте добавить метод
def user
User.find(user_id)
end
Заменить user_id
с вашим фактическим именем ключа, которое отображается на идентификатор пользователя.
Надеюсь, поможет!:)
Драгоценный камень Паранойи устанавливает область видимости по умолчанию для вашей модели, в которой значение удаленного атрибута, установленное с временными метками, не возвращается. Попробуйте открыть вашу модель как
User.unscoped.all
Кажется, вы установили dependent: :destroy
у пользователя имеется много заданий, и это единственный способ, при котором удаление пользователя вносит изменения в has_many. вы не хотите, чтобы они были скрыты, а затем просто удалите зависимую::destroy из пользовательской модели на имеет много заданий