2016-10-05 7 views
0

После мягкого удаления записи я не могу называть это действием show на контроллере, так как он ищет запись, соответствующую записи ID WHERE deleted_at IS NULLL, что верно, учитывая цель драгоценного камня, но я все равно чтобы иметь возможность получить к нему доступ в виде «readonly» в приложении, чтобы разрешить пользователю просматривать архив и, возможно, восстановить.Rails 5 Paranoia - Как я могу показать 'удаленную запись?

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

UPDATE 1

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

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

Новая проблема возникла после этого, из-за CanCanCan-хload_and_authorize_resource: он пытается позвонить по телефону

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

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

Вот нить с точно таким же вопросом: https://github.com/rubysherpas/paranoia/issues/356

Вот новый выпуск нить на StackOverflow: Rails 5 compatibility between Paranoia and CanCanCan, compromised?

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

UPDATE 2

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

+1

Вы можете использовать 'YourModel.readonly.find_with_deleted (Params [: ID])' или 'YourModel.readonly.with_deleted.find (Params [: ID])' – slowjack2k

+0

эй @ slowjack2k, 'YourModel.with_deleted.find (params [: id])' решил мою проблему, спасибо :) Не могли бы вы повернуть свой комментарий в ответ, чтобы я мог выбрать его, как правильный ответ? –

+0

Спасибо, я создал тент. – slowjack2k

ответ

1

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

0

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

Обзор: Давать, что у меня есть модель под названием Элементы, я буду иметь страницу, будет отображать все 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 с его связями и сохранить ваше чувство собственного головной боли. Хотя это было бы против директора DRY.

+0

Привет @ moataz-zaitoun, спасибо за ваше предложение! У меня есть фильтр для отображения только записей, которые удаляются в том же месте, что и индекс, поэтому, если фильтр включен, коллекция, переданная в действие индекса на контроллере, будет отфильтрована только с помощью_определения, else, получает все записи, которые weren Удалено. Я также использую фильтр для отображения записи, поэтому, если фильтр включен, он найдет запись среди коллекции удаленных записей, иначе она найдет среди активных записей. Таким образом, вам не нужен второй шаблон для разных коллекций! –

+0

Моя проблема заключалась в смешении ответа @ slowjack2k и возникла новая проблема с CanCanCan load_and_authorize_resource, игнорируя фильтр with_deleted и пытаясь найти запись среди обычной коллекции –

 Смежные вопросы

  • Нет связанных вопросов^_^