Rails с использованием Paranoia и Administrate, есть ли способ получить удаленную запись с администрацией для пользователя?
Я хотел бы, чтобы все удаленные записи изменялись из-за паранойи в админ-панели с администратором. Моя проблема в том, что я нахожу способ сделать это, но до сих пор безуспешно
На самом деле то, что я пытаюсь сделать, это переопределить метод индекса на конкретном контроллере сгенерировать с Administrate
, чтобы получить все элементы (удаленные или нет) в качестве ресурсов для текущего контроллера. Вот так:
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
Но когда я создаю объект foo из админ-панели, а после удаляю его. Запись больше не отображается, и я хотел бы, чтобы она оставалась видимой, чтобы дать возможность администратору изменить ее.
Если у кого-то есть мнение, чтобы сделать это возможным, было бы неплохо.
Спасибо заранее за вашу помощь.
1 ответ
Прежде всего, большое спасибо @Tom Lord, который помог мне решить мою проблему, и это решение:
- Прежде всего переопределите в вашем
app/controllers/admin/application_controller.rb
генерироватьAdministrate
как показано ниже:
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
Конечно поменяю deleted_at
поле зависит от того, какую миграцию вы сделали, чтобы добавить драгоценный камень паранойи.