Rails 5偏执狂 - 我怎样才能显示'删除的记录?

时间:2016-10-05 14:23:12

标签: ruby-on-rails ruby-paranoia

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

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

更新1

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

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

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

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

忽略 only_deleted 过滤器,导致错误,因为只有在deleted_at不为空(未删除)的情况下才会找到所选的ID,并且禁用授权"修复"它,所以它必须是 CanCanCan 偏执狂之间的问题。

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

这是StackOverflow上的新问题主题:Rails 5 compatibility between Paranoia and CanCanCan, compromised?

如果我找到了解决方案,我会再次使用该解决方案进行更新,谢谢。

更新2

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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校长。