Rails 5 Paranoia - Как я могу "показать" удаленную запись?

После мягкого удаления записи я не могу вызвать ее на show действие на контроллере, поскольку он ищет запись, соответствующую записи ID WHERE deleted_at IS NULLLЭто правильно, учитывая назначение драгоценного камня, но я все же хотел бы иметь возможность доступа к нему в своего рода "только длячтения" состоянии внутри приложения, чтобы позволить пользователю просматривать архив и, возможно, восстанавливать Это.

Как обойти область удаления, чтобы снова получить доступ к объекту?

ОБНОВЛЕНИЕ 1

По совету @slowjack2k я могу получить доступ к программно удаленным записям по следующему запросу:

 @area = Area.only_deleted.find(params[:id])

Впоследствии возникла новая проблема из-за CanCanCan load_and_authorize_resource: он пытается позвонить

 @area = Area.find(params[:id])

игнорирование фильтра only_deleted, приводящего к ошибке, так как выбранный идентификатор обнаруживается только в том случае, если delete_at не является нулевым (не удаленным), и отключение авторизации "исправляет" его, поэтому это должно быть проблемой между CanCanCan и Paranoia.

Вот тема с точно такой же проблемой: https://github.com/rubysherpas/paranoia/issues/356

Вот новый поток вопросов о Stackru: совместимость Rails 5 между Paranoia и CanCanCan, скомпрометирована?

Я обновлю его снова решением, если найду его, спасибо.

ОБНОВЛЕНИЕ 2

Проблема была решена, и решение может быть найдено в новой ветке проблемы, которую я упомянул выше.

2 ответа

Решение

Ты можешь использовать YourModel.readonly.find_with_deleted(params[:id]) или же YourModel.readonly.with_deleted.find(params[:id])

Я бросил это раньше, и я объясню свой подход, чтобы решить это..

Обзор: если у меня есть модель с названием " Предметы", у меня будет страница, на которой будут отображаться все Soft Deleted Предметы я назову неактивными. Используя тот же шаблон действия индекса

Сначала вы должны создать маршрут

  resources :items

    collection do
      get 'inactive'
    end

  end

Во-вторых, вы должны создать действие контроллера...

  def inactive
    @Items = Items.only_deleted
    render action: :index
  end

В-третьих, я пойду ../items/inactive И он будет отображать в активных или заархивированных элементов

Вы также можете после этого использовать...

<%= link_to "Archived Items", inactive_items_path %>

По вашему мнению, чтобы перейти на эту страницу

Обновить

Здесь я должен упомянуть, что с помощью index посмотреть, чтобы сделать inactive Коллекцияпредметов может оставить вас с битыми ссылками.

просмотров / пункты / index.html.erb

<td><%= link_to 'Show', merchant %></td>
<td><%= link_to 'Edit', edit_merchant_path(merchant) %></td>
<td><%= link_to 'Destroy', merchant, method: :delete, data: { confirm: 'Are you sure?' } %></td>

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

Или вариант № 2 - потерять render action: :index линия и сделать отдельный вид inactive.html.erb с его ссылками и сохранить себе головную боль. Хотя это было бы против СУХОГО принципала.

Другие вопросы по тегам