软删除记录后,我无法在控制器上的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
问题已经解决,解决方案可以在我上面提到的新问题主题中找到。
答案 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校长。