0

软删除记录后,我无法show在控制器上的操作上调用它,因为它会查找与记录匹配的记录ID WHERE deleted_at IS NULLL,考虑到 gem 的用途,这是正确的,但我仍然希望能够在应用程序中以某种“只读”状态访问它,以允许用户查看存档并可能恢复它。

如何解决删除范围以便我可以再次访问该对象?

更新 1

根据@slowjack2k 的建议,我可以使用以下查询访问软删除的记录:

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

由于CanCanCan 的 load_and_authorize_resource原因,之后出现了一个新问题:它试图调用

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

忽略only_deleted过滤器,导致错误,因为仅在 deleted_at 不为空(未删除)的情况下找到所选 id,并且禁用授权“修复”它,因此它必须是CanCanCanParanoia之间的问题。

这是一个具有完全相同问题的线程:https ://github.com/rubysherpas/paranoia/issues/356

这是 StackOverflow 上的新问题:Rails 5 compatibility between Paranoia 和 CanCanCan,妥协了吗?

如果我找到解决方案,我会再次更新它,谢谢。

更新 2

问题已解决,可以在我上面提到的新问题线程中找到解决方案。

4

2 回答 2

4

您可以使用YourModel.readonly.find_with_deleted(params[:id])YourModel.readonly.with_deleted.find(params[:id])

于 2016-10-05T21:19:25.387 回答
1

我以前被扔过,我会解释我解决这个问题的方法..

概述: 假设我有一个名为Items的模型,我将有一个页面显示Soft Deleted我将调用的所有项目inactive。使用相同的索引操作模板

首先,您应该创建一条路线

  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 Items集合可能会给您留下断开的链接。

意见/项目/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 原则。

于 2016-10-05T14:43:52.960 回答