# 用户个人资料页面上的批准按钮无法工作

**URL:** https://meta.discourse.org/t/approval-button-on-users-profile-doesnt-work/403620
**Category:** Bug
**Created:** [2026年五月22日 11:52 UTC](https://meta.discourse.org/t/approval-button-on-users-profile-doesnt-work/403620 "2026-05-22T11:52:01Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [2026年五月22日 11:52 UTC](https://meta.discourse.org/t/approval-button-on-users-profile-doesnt-work/403620/1 "2026-05-22T11:52:01Z")

</div>

继续之前关于 [通知声称有待审批的 X 用户，但找不到任何用户](https://meta.discourse.org/t/notification-claims-x-users-for-approval-but-none-are-found/262853/17) 的讨论：

我最近在我的论坛上重新启用了 `require_approval` 设置。之后立刻收到了关于有待审批用户的通知，但当我点击消息中的链接时，审核队列中并没有显示任何用户。从那以后，我每隔 7 天就会收到一次这样的通知。因此，我使用了数据探索器（[Data Explorer](https://meta.discourse.org/t/32566?silent=true)）来查找那个未被批准但也不出现在审核队列中的用户。

> **从其他主题引用的更详细步骤**
>
> > [@Moin](#):
> >
> > 你可以使用 [数据探索器](https://meta.discourse.org/t/32566?silent=true) 查询来找到你在队列中看不到的用户，并在其管理员页面上直接批准他们。
> > 
> > ```plaintext
> > SELECT id as user_id
> > FROM users
> > WHERE approved = false
> > AND active = true
> > 
> > ```
> > 
> > 这是我最近所做的。我也每隔 7 天收到这条消息。所以我使用了该查询，结果如下：
> > 
> > ![Screenshot20260522091428Firefox](https://global.discourse-cdn.com/meta/original/4X/1/d/6/1d6de29f2a345f2ce5d45372ce498ab6147e6432.jpeg)
> > 
> > 我在用户管理员页面上也验证了这一点：
> > 
> > ![Screenshot20260522085849Firefox](https://global.discourse-cdn.com/meta/original/4X/7/4/6/746538d48b59e8a6ab5151d5c6b8d2d4cc986b44.jpeg)
> > 
> > 但我仍然需要找出为什么在我的情况下按钮无法工作。我还没有机会去检查它。

因此，当我查看用户管理员页面时，那里确实有预期的“批准”按钮。问题在于它无法工作。没有可见的反馈，例如显示错误的模态框。但在我的浏览器控制台中确实有一个错误：

> **浏览器控制台中的错误**
>
> ```plaintext
> ajax.js:233 PUT https://my-forum.discourse.group/admin/users/123/approve 500 (Internal Server Error)
> send @ jquery.js:9940
> ajax @ jquery.js:9521
> performAjax @ ajax.js:233
> (anonymous) @ ajax.js:246
> approve @ admin-user.js:220
> approve @ index.js:224
> (anonymous) @ d-button.gjs:206
> invoke @ index.js:264
> flush @ index.js:180
> flush @ index.js:334
> _end @ index.js:762
> end @ index.js:565
> _runExpiredTimers @ index.js:869
> setTimeout
> setTimeout @ index.js:39
> _installTimerTimeout @ index.js:912
> _reinstallTimerTimeout @ index.js:896
> _later @ index.js:829
> later @ index.js:652
> next @ index.js:562
> _triggerAction @ d-button.gjs:203
> click @ d-button.gjs:161
> 
> /admin/users/123/anon84265489:1 Uncaught (in promise) {jqXHR: {…}, textStatus: 'error', errorThrown: ''}errorThrown: ""jqXHR: abort: ƒ (e)always: ƒ ()catch: ƒ (e)done: ƒ ()fail: ƒ ()getAllResponseHeaders: ƒ ()getResponseHeader: ƒ (e)jqTextStatus: "error"overrideMimeType: ƒ (e)pipe: ƒ ()progress: ƒ ()promise: ƒ (e)readyState: 4requestedUrl: "/admin/users/123/approve"responseText: "<!DOCTYPE html>\n<html>\n<head>\n <title>Oops - Error 500</title>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n</head>\n<body>\n <h1>Oops</h1>\n <p>The software powering this discussion forum encountered an unexpected problem. We apologize for the inconvenience.</p>\n <p>Detailed information about the error was logged, and an automatic notification generated. We'll take a look at it.</p>\n <p>No further action is necessary. However, if the error condition persists, you can provide additional detail, including steps to reproduce the error, by posting a discussion topic in the site's feedback category.</p>\n</body>\n</html>\n"setRequestHeader: ƒ (e,t)state: ƒ ()status: 500statusCode: ƒ (e)statusText: "error"then: ƒ (e,i,n)[[Prototype]]: ObjecttextStatus: "error"[[Prototype]]: Object
> Promise.then
> approve @ admin-user.js:222
> approve @ index.js:224
> (anonymous) @ d-button.gjs:206
> invoke @ index.js:264
> flush @ index.js:180
> flush @ index.js:334
> _end @ index.js:762
> end @ index.js:565
> _runExpiredTimers @ index.js:869
> setTimeout
> setTimeout @ index.js:39
> _installTimerTimeout @ index.js:912
> _reinstallTimerTimeout @ index.js:896
> _later @ index.js:829
> later @ index.js:652
> next @ index.js:562
> _triggerAction @ d-button.gjs:203
> click @ d-button.gjs:161
> 
> ```

接下来我检查了 /logs：

> **日志中的错误**
>
> ```plaintext
> Message (14 copies reported)
> 
> Reviewable::InvalidAction (Can't perform `approve_user` on ReviewableUser)
> app/models/reviewable.rb:860:in 'Reviewable#validate_action!'
> app/models/reviewable.rb:360:in 'Reviewable#perform'
> app/controllers/admin/users_controller.rb:306:in 'Admin::UsersController#approve'
> app/controllers/application_controller.rb:452:in 'block in ApplicationController#with_resolved_locale'
> app/controllers/application_controller.rb:452:in 'ApplicationController#with_resolved_locale'
> app/controllers/application_controller.rb:1101:in 'ApplicationController#ensure_dont_cache_page'
> lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
> lib/middleware/crawler_hooks.rb:13:in 'Middleware::CrawlerHooks#call'
> lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
> lib/middleware/anonymous_cache.rb:417:in 'Middleware::AnonymousCache#call'
> lib/middleware/csp_script_nonce_injector.rb:12:in 'Middleware::CspScriptNonceInjector#call'
> lib/middleware/track_view_session_id_injector.rb:12:in 'Middleware::TrackViewSessionIdInjector#call'
> config/initializers/008-rack-cors.rb:26:in 'Discourse::Cors#call'
> lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
> config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
> config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
> lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
> lib/middleware/request_tracker.rb:372:in 'Middleware::RequestTracker#call'
> lib/middleware/overload_protections.rb:18:in 'Middleware::OverloadProtections#call'
> lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'
> 
> Backtrace
> 
> app/models/reviewable.rb:860:in 'Reviewable#validate_action!'
> app/models/reviewable.rb:360:in 'Reviewable#perform'
> app/controllers/admin/users_controller.rb:306:in 'Admin::UsersController#approve'
> actionpack (8.0.5) lib/action_controller/metal/basic_implicit_render.rb:8:in 'ActionController::BasicImplicitRender#send_action'
> actionpack (8.0.5) lib/abstract_controller/base.rb:215:in 'AbstractController::Base#process_action'
> actionpack (8.0.5) lib/action_controller/metal/rendering.rb:193:in 'ActionController::Rendering#process_action'
> actionpack (8.0.5) lib/abstract_controller/callbacks.rb:261:in 'block in AbstractController::Callbacks#process_action'
> activesupport (8.0.5) lib/active_support/callbacks.rb:120:in 'block in ActiveSupport::Callbacks#run_callbacks'
> app/controllers/application_controller.rb:452:in 'block in ApplicationController#with_resolved_locale'
> i18n (1.14.8) lib/i18n.rb:354:in 'I18n::Base#with_locale'
> app/controllers/application_controller.rb:452:in 'ApplicationController#with_resolved_locale'
> activesupport (8.0.5) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
> app/controllers/application_controller.rb:1101:in 'ApplicationController#ensure_dont_cache_page'
> activesupport (8.0.5) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
> activesupport (8.0.5) lib/active_support/callbacks.rb:140:in 'ActiveSupport::Callbacks#run_callbacks'
> actionpack (8.0.5) lib/abstract_controller/callbacks.rb:260:in 'AbstractController::Callbacks#process_action'
> actionpack (8.0.5) lib/action_controller/metal/rescue.rb:27:in 'ActionController::Rescue#process_action'
> actionpack (8.0.5) lib/action_controller/metal/instrumentation.rb:76:in 'block in ActionController::Instrumentation#process_action'
> activesupport (8.0.5) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'
> activesupport (8.0.5) lib/active_support/notifications/instrumenter.rb:58:in 'ActiveSupport::Notifications::Instrumenter#instrument'
> activesupport (8.0.5) lib/active_support/notifications.rb:210:in 'ActiveSupport::Notifications.instrument'
> actionpack (8.0.5) lib/action_controller/metal/instrumentation.rb:75:in 'ActionController::Instrumentation#process_action'
> actionpack (8.0.5) lib/action_controller/metal/params_wrapper.rb:259:in 'ActionController::ParamsWrapper#process_action'
> activerecord (8.0.5) lib/active_record/railties/controller_runtime.rb:39:in 'ActiveRecord::Railties::ControllerRuntime#process_action'
> actionpack (8.0.5) lib/abstract_controller/base.rb:152:in 'AbstractController::Base#process'
> actionview (8.0.5) lib/action_view/rendering.rb:40:in 'ActionView::Rendering#process'
> rack-mini-profiler (4.0.1) lib/mini_profiler/profiling_methods.rb:90:in 'block in ActionController::Base#profile_method'
> actionpack (8.0.5) lib/action_controller/metal.rb:252:in 'ActionController::Metal#dispatch'
> actionpack (8.0.5) lib/action_controller/metal.rb:335:in 'ActionController::Metal.dispatch'
> actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:67:in 'ActionDispatch::Routing::RouteSet::Dispatcher#dispatch'
> actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:50:in 'ActionDispatch::Routing::RouteSet::Dispatcher#serve'
> actionpack (8.0.5) lib/action_dispatch/routing/mapper.rb:32:in 'block in <class:Constraints>'
> actionpack (8.0.5) lib/action_dispatch/routing/mapper.rb:62:in 'ActionDispatch::Routing::Mapper::Constraints#serve'
> actionpack (8.0.5) lib/action_dispatch/journey/router.rb:53:in 'block in ActionDispatch::Journey::Router#serve'
> actionpack (8.0.5) lib/action_dispatch/journey/router.rb:133:in 'block in ActionDispatch::Journey::Router#find_routes'
> actionpack (8.0.5) lib/action_dispatch/journey/router.rb:126:in 'Array#each'
> actionpack (8.0.5) lib/action_dispatch/journey/router.rb:126:in 'ActionDispatch::Journey::Router#find_routes'
> actionpack (8.0.5) lib/action_dispatch/journey/router.rb:34:in 'ActionDispatch::Journey::Router#serve'
> actionpack (8.0.5) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
> lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
> lib/middleware/crawler_hooks.rb:13:in 'Middleware::CrawlerHooks#call'
> rack (2.2.23) lib/rack/tempfile_reaper.rb:15:in 'Rack::TempfileReaper#call'
> rack (2.2.23) lib/rack/conditional_get.rb:40:in 'Rack::ConditionalGet#call'
> rack (2.2.23) lib/rack/head.rb:12:in 'Rack::Head#call'
> actionpack (8.0.5) lib/action_dispatch/http/permissions_policy.rb:38:in 'ActionDispatch::PermissionsPolicy::Middleware#call'
> lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
> lib/middleware/anonymous_cache.rb:417:in 'Middleware::AnonymousCache#call'
> lib/middleware/csp_script_nonce_injector.rb:12:in 'Middleware::CspScriptNonceInjector#call'
> lib/middleware/track_view_session_id_injector.rb:12:in 'Middleware::TrackViewSessionIdInjector#call'
> config/initializers/008-rack-cors.rb:26:in 'Discourse::Cors#call'
> rack (2.2.23) lib/rack/session/abstract/id.rb:266:in 'Rack::Session::Abstract::Persisted#context'
> rack (2.2.23) lib/rack/session/abstract/id.rb:260:in 'Rack::Session::Abstract::Persisted#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/cookies.rb:706:in 'ActionDispatch::Cookies#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/callbacks.rb:31:in 'block in ActionDispatch::Callbacks#call'
> activesupport (8.0.5) lib/active_support/callbacks.rb:100:in 'ActiveSupport::Callbacks#run_callbacks'
> actionpack (8.0.5) lib/action_dispatch/middleware/callbacks.rb:30:in 'ActionDispatch::Callbacks#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/debug_exceptions.rb:31:in 'ActionDispatch::DebugExceptions#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/show_exceptions.rb:32:in 'ActionDispatch::ShowExceptions#call'
> logster (2.21.0) lib/logster/middleware/reporter.rb:40:in 'Logster::Middleware::Reporter#call'
> lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
> lograge (0.14.0) lib/lograge/rails_ext/rack/logger.rb:18:in 'Rails::Rack::Logger#call_app'
> railties (8.0.5) lib/rails/rack/logger.rb:29:in 'Rails::Rack::Logger#call'
> config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
> config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/request_id.rb:34:in 'ActionDispatch::RequestId#call'
> lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
> rack (2.2.23) lib/rack/method_override.rb:24:in 'Rack::MethodOverride#call'
> rack (2.2.23) lib/rack/sendfile.rb:127:in 'Rack::Sendfile#call'
> plugins/discourse-prometheus/lib/middleware/metrics.rb:14:in 'DiscoursePrometheus::Middleware::Metrics#call'
> rack-mini-profiler (4.0.1) lib/mini_profiler.rb:191:in 'Rack::MiniProfiler#call'
> message_bus (4.5.2) lib/message_bus/rack/middleware.rb:60:in 'MessageBus::Rack::Middleware#call'
> lib/middleware/request_tracker.rb:372:in 'Middleware::RequestTracker#call'
> actionpack (8.0.5) lib/action_dispatch/middleware/remote_ip.rb:96:in 'ActionDispatch::RemoteIp#call'
> lib/middleware/overload_protections.rb:18:in 'Middleware::OverloadProtections#call'
> lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'
> rails_failover (2.3.0) lib/rails_failover/active_record/middleware.rb:67:in 'block in RailsFailover::ActiveRecord::Middleware#call'
> activerecord (8.0.5) lib/active_record/connection_handling.rb:401:in 'ActiveRecord::ConnectionHandling#with_role_and_shard'
> activerecord (8.0.5) lib/active_record/connection_handling.rb:149:in 'ActiveRecord::ConnectionHandling#connected_to'
> rails_failover (2.3.0) lib/rails_failover/active_record/middleware.rb:64:in 'RailsFailover::ActiveRecord::Middleware#call'
> rails_multisite (7.0.0) lib/rails_multisite/middleware.rb:26:in 'RailsMultisite::Middleware#call'
> railties (8.0.5) lib/rails/engine.rb:535:in 'Rails::Engine#call'
> railties (8.0.5) lib/rails/railtie.rb:226:in 'Kernel#public_send'
> railties (8.0
> 
> Env
> 
> HTTP HOSTS: my-forum.discourse.group
> 
> ```

我不确定是什么导致了这个问题。在我启用该设置时，其他匿名化用户都顺利获得了批准。

---

_[View the full topic](https://meta.discourse.org/t/approval-button-on-users-profile-doesnt-work/403620)._
