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, который помог мне решить мою проблему, и это решение:

  1. Прежде всего переопределите в вашем 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
  1. В вашем 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 поле зависит от того, какую миграцию вы сделали, чтобы добавить драгоценный камень паранойи.

Другие вопросы по тегам