From 7b6b7ca863ed22e0ef7e4fa98f743c6a81c77c0e Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Thu, 18 Jul 2024 13:34:01 +1000 Subject: [PATCH] FIX: fallback to custom type for flags (#27961) Before migration is run flags code is evaluated. It is causing error: ``` NoMethodError: undefined method `require_message' for an instance of Flag (NoMethodError) Did you mean? require_dependency /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activemodel-7.1.3.4/lib/active_model/attribute_methods.rb:489:in `method_missing' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.3.4/lib/active_record/relation/delegation.rb:100:in `each' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.1.3.4/lib/active_record/relation/delegation.rb:100:in `each' /var/www/discourse/app/models/post_action_type.rb:64:in `reject' ``` The solution is to temporarily fall back to old column name - custom_type --- app/models/flag.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/models/flag.rb b/app/models/flag.rb index 91538ea79cfd9..2ae11af820c33 100644 --- a/app/models/flag.rb +++ b/app/models/flag.rb @@ -1,9 +1,6 @@ # frozen_string_literal: true class Flag < ActiveRecord::Base - # TODO(2025-01-15): krisk remove - self.ignored_columns = ["custom_type"] - DEFAULT_VALID_APPLIES_TO = %w[Post Topic] MAX_SYSTEM_FLAG_ID = 1000 MAX_NAME_LENGTH = 200 @@ -26,6 +23,15 @@ def self.valid_applies_to_types Set.new(DEFAULT_VALID_APPLIES_TO | DiscoursePluginRegistry.flag_applies_to_types) end + # TODO(2025-01-15): krisk remove + def require_message + if ActiveRecord::Base.connection.column_exists?(:flags, :require_message) + super + else + self.custom_type + end + end + def self.reset_flag_settings! # Flags are memoized for better performance. After the update, we need to reload them in all processes. PostActionType.reload_types