首页 > 解决方案 > 活跃的管理员偏执狂宝石不能与友好的 id 宝石一起使用?

问题描述

我正在开发 Rails 6 应用程序,并且有一个博客模型,其中包含FriendlyIdgem 生成的 slug。我添加了 Active admin,我必须添加此代码以config/initializers/active_admin.rb使其正常工作并按 id 而不是slug.

  ActiveAdmin::ResourceController.class_eval do
    def find_resource
      resource_class.is_a?(FriendlyId) ? scoped_collection.friendly.find(params[:id]) : scoped_collection.find(params[:id])
    end
  end

然后我在软删除的帖子中添加了偏执狂。

我添加gem 'paranoia', '~> 2.4', '>= 2.4.2'并运行

rails g migration AddDeletedAtToPosts deleted_at:datetime:index

在帖子模型中:

应用程序/模型/post.rb

class Post < ApplicationRecord
  acts_as_paranoid

  extend FriendlyId
  friendly_id :title, :body use: :slugged

  validates_presence_of :title, :body
end

这在视图和 Rails 控制台中工作正常,查看和销毁帖子没有问题。

但我想将软删除添加到我的active-admin.

我安装gem "active_admin_paranoia" , '~> 1.0.11'并添加

应用程序/管理员/blog.rb

ActiveAdmin.register Blog do
  active_admin_paranoia

  actions :all, except: [:edit]
  permit_params :title, :body, :slug
end

现在,当我尝试view进出仪表板时archiveactive-admin我得到了

Started DELETE "/admin/posts/my-post-0" for ::1 at 2020-07-16 15:14:26 -0300
Processing by Admin::postsController#destroy as HTML
  Parameters: {"authenticity_token"=>"aaaaaaa", "id"=>"my-post-0"}
  AdminUser Load (0.3ms)  SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = $1 ORDER BY "admin_users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  Post Load (0.5ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 ORDER BY "posts"."id" ASC LIMIT $2  [["id", nil], ["LIMIT", 1]]
Completed 404 Not Found in 8ms (ActiveRecord: 0.8ms | Allocations: 3691)

  
ActiveRecord::RecordNotFound (Couldn't find Post with [WHERE "posts"."id" = $1]):
  
activerecord (6.0.3.2) lib/active_record/relation/finder_methods.rb:336:in `raise_record_not_found_exception!'
activerecord (6.0.3.2) lib/active_record/relation/finder_methods.rb:127:in `first!'
active_admin_paranoia (1.0.11) lib/active_admin_paranoia/dsl.rb:6:in `find_resource'
activeadmin (2.7.0) lib/active_admin/resource_controller/data_access.rb:90:in `resource'
inherited_resources (1.11.0) lib/inherited_resources/actions.rb:55:in `destroy'
actionpack (6.0.3.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.0.3.2) lib/abstract_controller/base.rb:195:in `process_action'
actionpack (6.0.3.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.0.3.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'

我怎样才能解决这个问题?

标签: ruby-on-railsactiveadminruby-paranoia

解决方案


你检查过这个PR吗?它似乎做你正在寻找的东西。

在此 PR 中,他们将 search 方法替换为where(id: params[:id]).first使用public_send(method_for_find, params[:id])rails 方法进行搜索的搜索方法,该方法适用于friendly id.

https://github.com/raihan2006i/active_admin_paranoia/pull/12/files


推荐阅读