Category Experts Plugin stürzt beim Zusammenführen von Benutzern ab

Beim Zusammenführen zweier Benutzer über die Kommandozeile schlug die Zusammenführung fehl, weil es im Plugin „Category Experts" zu einem Absturz kam. Das Deaktivieren des Plugins vor der Zusammenführung löste das Problem.

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

Code:

  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

Da die einzige Änderung dort in post.custom_fields besteht, bin ich der Ansicht, dass post.save! hier unnötig ist und post.save_custom_fields ausreichen würde.

2 „Gefällt mir“