I would like to get all deleted records change by paranoia on admin panel with administrate. My problem is that I'm finding a way to do this stuff but until now without success
Actually what I'm trying to do is to override index method on a specific controller generate with Administrate
, in order to get all elements (deleted or not) as resources for the current controller. Like so:
controllers/admin/foo_controller.rb
module Admin
class FooController < Admin::ApplicationController
super
resources = Foo.where("at_delete IS NOT NULL").page(params[:page])
end
end
But when I create a foo object from the admin panel, and after removed it. The record isn't display anymore and I would like to get it still visible for giving the possibility to admin to change it.
If anyone has an opinion to make this possible, it would be nice.
Thank you in advance for your help.
First of all a big thanks to @Tom Lord, that help me to solved my problem, and that is the solution:
app/controllers/admin/application_controller.rb
generate by Administrate
as below:module Admin
class ApplicationController < Administrate::ApplicationController
...
def index
search_term = params[:search].to_s.strip
resources = Administrate::Search.new(scoped_resource,
dashboard_class,
search_term).run
resources = resources.includes(*resource_includes) if resource_includes.any?
resources = order.apply(resources)
resources = resources.page(params[:page]).per(records_per_page)
resources = finder_chain_additions(resources)
page = Administrate::Page::Collection.new(dashboard, order: order)
render locals: {
resources: resources,
search_term: search_term,
page: page,
show_search_bar: show_search_bar?
}
end
private
def scoped_resource
begin
# Provide resource with deleted_at field generate with Paranoia
resource_class.unscoped
rescue
# Used for models whose don't have Paranoia field
resource_class
end
end
def finder_chain_additions resources
begin
resources.with_deleted
rescue
resources
end
end
end
end
app/dashboards/foo_dashboard.rb
require "administrate/base_dashboard"
class ArticleDashboard < Administrate::BaseDashboard
# ATTRIBUTE_TYPES
# a hash that describes the type of each of the model's fields.
#
# Each different type represents an Administrate::Field object,
# which determines how the attribute is displayed
# on pages throughout the dashboard.
ATTRIBUTE_TYPES = {
id: Field::Number,
...
created_at: Field::DateTime,
updated_at: Field::DateTime,
deleted_at: Field::DateTime,
}.freeze
# COLLECTION_ATTRIBUTES
# an array of attributes that will be displayed on the model's index page.
#
# By default, it's limited to four items to reduce clutter on index pages.
# Feel free to add, remove, or rearrange items.
COLLECTION_ATTRIBUTES = [
:id,
...
:deleted_at,
:hide,
].freeze
# SHOW_PAGE_ATTRIBUTES
# an array of attributes that will be displayed on the model's show page.
SHOW_PAGE_ATTRIBUTES = [
:id,
...
:deleted_at,
:created_at,
:updated_at,
].freeze
# FORM_ATTRIBUTES
# an array of attributes that will be displayed
# on the model's form (`new` and `edit`) pages.
FORM_ATTRIBUTES = [
...
:deleted_at,
].freeze
# Overwrite this method to customize how articles are displayed
# across all pages of the admin dashboard.
#
# def display_resource(article)
# "Article ##{article.id}"
# end
end
Of course change deleted_at
field depends on the migration you may have done in order to add paranoia gem.