مرجع: Run Data Explorer queries with the Discourse API
عند تمرير المعلمات إلى استعلام SQL باستخدام واجهة برمجة التطبيقات (API)، يتطلب Discourse حاليًا تغليف جميع القيم باستخدام علامات الاقتباس المزدوجة، بما في ذلك الأعداد الصحيحة، التي لا يتم تغليفها افتراضيًا في بعض الأنظمة (مثل json_encode في PHP). بالنظر إلى JSON RFC، لا يوجد شرط لاستخدام علامات الاقتباس المزدوجة للأعداد الصحيحة. هذا المطلب يتعارض أيضًا مع فلسفة “كن متسامحًا فيما تقبله…”
كيفية التكرار؟
-F 'params={\"user_id\":2}'
يعيد الخادم خطأ 500 Internal Server Error.
في سجلات الأخطاء، يظهر هذا:
NoMethodError (undefined method `downcase' for 2:Integer)
app/controllers/application_controller.rb:424:in `block in with_resolved_locale'
app/controllers/application_controller.rb:424:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/missing_avatars.rb:22:in `call'
lib/middleware/turbo_dev.rb:31:in `call'
lib/middleware/processing_request.rb:12:in `call'
Backtrace
plugins/discourse-data-explorer/lib/discourse_data_explorer/parameter.rb:121:in `cast_to_ruby'
...
هذا التنسيق يعمل بشكل صحيح:
-F 'params={\"user_id\":\"2\"}'
أشارك هذا ليس لأنني مهووس بالتفاصيل، ولكن لتوفير الوقت لأي شخص قد يواجه مشكلة مماثلة لما واجهته. لقد استغرقت وقتًا طويلاً لمعرفة سبب المشكلة.