تتسبب إضافة خبراء الفئات في انهيار النظام عند دمج المستخدمين

عند دمج مستخدمين عبر سطر الأوامر، فشل الدمج بسبب انهيار في إضافة “خبراء التصنيف”. تم حل المشكلة بتعطيل الإضافة قبل الدمج.

rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Body can't be blank, Body seems unclear, is it a complete sentence? (ActiveRecord::RecordInvalid)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/validations.rb:87:in `raise_validation_error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/validations.rb:54:in `save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:365:in `block in save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:417:in `block (2 levels) in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/transaction.rb:626:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/transaction.rb:623:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:367:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:359:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:413:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:416:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/connection_handling.rb:312:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:409:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/transactions.rb:365:in `save!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-8.0.4/lib/active_record/suppressor.rb:56:in `save!'
/var/www/discourse/plugins/discourse-category-experts/plugin.rb:351:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:637:in `block in on'
/var/www/discourse/lib/discourse_event.rb:12:in `block in trigger'
/var/www/discourse/lib/discourse_event.rb:12:in `trigger'
/var/www/discourse/app/models/post.rb:878:in `set_owner'
/var/www/discourse/app/services/post_owner_changer.rb:30:in `bl

الكود:

  on(:post_owner_changed) do |post, old_owner, new_owner|
    previously_approved = !post.custom_fields[CategoryExperts::POST_PENDING_EXPERT_APPROVAL]
    post.custom_fields.delete(CategoryExperts::POST_APPROVED_GROUP_NAME)
    post.custom_fields.delete(CategoryExperts::POST_PENDING_EXPERT_APPROVAL)
    post.save!
    CategoryExperts::PostHandler.new(post: post, user: new_owner).process_new_post(
      previously_approved: previously_approved,
    )
  end

بما أن التعديل الوحيد هناك هو post.custom_fields، فأعتقد أن post.save! غير ضروري وأن post.save_custom_fields سيكون كافياً هنا.

إعجابَين (2)