ruby-on-rails - 活跃的管理员偏执狂宝石不能与友好的 id 宝石一起使用?
问题描述
我正在开发 Rails 6 应用程序,并且有一个博客模型,其中包含FriendlyId
gem 生成的 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
进出仪表板时archive
,active-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'
我怎样才能解决这个问题?
解决方案
你检查过这个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
推荐阅读
- ios - 同时使用 Metal 和 SceneKit 的问题
- asp.net-mvc - 如何使用asp.net mvc在ckeditor中上传图像
- android - 如果我调用 pojo 类 get 方法,它会给出错误。这是我的 pojo 课
- c++ - 如何在 Sublime text 3 中编译多个 .cpp 文件和 main.cpp
- shell - 使用多个命令替换 Shell 脚本命令
- eclipse - 是否可以将所有选定的项目从 Eclipse 提交到一个 github 存储库
- cloud - Google Cloud Storage - 为不同用户设置存储桶中子文件夹的唯一权限
- php - PHP $_POST['xxx'] 问题
- python - 如何在 cv2.waitkey 中为网络摄像头中的 2 个窗口设置不同的时间
- php - 单击链接时如何使背景变暗?