class ForeignKeys < ActiveRecord::Migration[4.2] disable_ddl_transaction! def change # return if it's a new setup return if !Setting.find_by(name: 'system_init_done') # remove wrong plural of ID columns ActiveRecord::Migration.rename_column :ticket_flags, :tickets_id, :ticket_id ActiveRecord::Migration.rename_column :ticket_article_flags, :ticket_articles_id, :ticket_article_id # add missing foreign keys foreign_keys = [ # Base %i[users organizations], [:users, :users, column: :created_by_id], [:users, :users, column: :updated_by_id], [:signatures, :users, column: :created_by_id], [:signatures, :users, column: :updated_by_id], [:email_addresses, :users, column: :created_by_id], [:email_addresses, :users, column: :updated_by_id], %i[groups signatures], %i[groups email_addresses], [:groups, :users, column: :created_by_id], [:groups, :users, column: :updated_by_id], [:roles, :users, column: :created_by_id], [:roles, :users, column: :updated_by_id], [:organizations, :users, column: :created_by_id], [:organizations, :users, column: :updated_by_id], %i[roles_users users], %i[roles_users roles], %i[groups_users users], %i[groups_users groups], %i[organizations_users users], %i[organizations_users organizations], %i[authorizations users], [:translations, :users, column: :created_by_id], [:translations, :users, column: :updated_by_id], %i[tokens users], [:packages, :users, column: :created_by_id], [:packages, :users, column: :updated_by_id], %i[taskbars users], %i[tags tag_items], %i[tags tag_objects], [:tags, :users, column: :created_by_id], [:recent_views, :object_lookups, column: :recent_view_object_id], [:recent_views, :users, column: :created_by_id], [:activity_streams, :type_lookups, column: :activity_stream_type_id], [:activity_streams, :object_lookups, column: :activity_stream_object_id], %i[activity_streams permissions], %i[activity_streams groups], [:activity_streams, :users, column: :created_by_id], %i[histories history_types], %i[histories history_objects], %i[histories history_attributes], [:histories, :users, column: :created_by_id], %i[stores store_objects], %i[stores store_files], [:stores, :users, column: :created_by_id], [:avatars, :users, column: :created_by_id], [:avatars, :users, column: :updated_by_id], [:online_notifications, :users, column: :created_by_id], [:online_notifications, :users, column: :updated_by_id], [:schedulers, :users, column: :created_by_id], [:schedulers, :users, column: :updated_by_id], [:calendars, :users, column: :created_by_id], [:calendars, :users, column: :updated_by_id], %i[user_devices users], %i[object_manager_attributes object_lookups], [:object_manager_attributes, :users, column: :created_by_id], [:object_manager_attributes, :users, column: :updated_by_id], %i[cti_caller_ids users], [:stats_stores, :users, column: :created_by_id], [:http_logs, :users, column: :created_by_id], [:http_logs, :users, column: :updated_by_id], # Ticket [:ticket_state_types, :users, column: :created_by_id], [:ticket_state_types, :users, column: :updated_by_id], [:ticket_states, :ticket_state_types, column: :state_type_id], [:ticket_states, :users, column: :created_by_id], [:ticket_states, :users, column: :updated_by_id], [:ticket_priorities, :users, column: :created_by_id], [:ticket_priorities, :users, column: :updated_by_id], %i[tickets groups], [:tickets, :users, column: :owner_id], [:tickets, :users, column: :customer_id], [:tickets, :ticket_priorities, column: :priority_id], [:tickets, :ticket_states, column: :state_id], %i[tickets organizations], [:tickets, :users, column: :created_by_id], [:tickets, :users, column: :updated_by_id], [:ticket_flags, :tickets, column: :ticket_id], [:ticket_flags, :users, column: :created_by_id], [:ticket_article_types, :users, column: :created_by_id], [:ticket_article_types, :users, column: :updated_by_id], [:ticket_article_senders, :users, column: :created_by_id], [:ticket_article_senders, :users, column: :updated_by_id], %i[ticket_articles tickets], [:ticket_articles, :ticket_article_types, column: :type_id], [:ticket_articles, :ticket_article_senders, column: :sender_id], [:ticket_articles, :users, column: :created_by_id], [:ticket_articles, :users, column: :updated_by_id], [:ticket_articles, :users, column: :origin_by_id], [:ticket_article_flags, :ticket_articles, column: :ticket_article_id], [:ticket_article_flags, :users, column: :created_by_id], %i[ticket_time_accountings tickets], %i[ticket_time_accountings ticket_articles], [:ticket_time_accountings, :users, column: :created_by_id], [:overviews, :users, column: :created_by_id], [:overviews, :users, column: :updated_by_id], %i[overviews_roles overviews], %i[overviews_roles roles], %i[overviews_users overviews], %i[overviews_users users], %i[overviews_groups overviews], %i[overviews_groups groups], [:triggers, :users, column: :created_by_id], [:triggers, :users, column: :updated_by_id], [:jobs, :users, column: :created_by_id], [:jobs, :users, column: :updated_by_id], %i[links link_types], [:postmaster_filters, :users, column: :created_by_id], [:postmaster_filters, :users, column: :updated_by_id], %i[text_modules users], [:text_modules, :users, column: :created_by_id], [:text_modules, :users, column: :updated_by_id], %i[text_modules_groups text_modules], %i[text_modules_groups groups], %i[templates users], [:templates, :users, column: :created_by_id], [:templates, :users, column: :updated_by_id], %i[templates_groups templates], %i[templates_groups groups], %i[channels groups], [:channels, :users, column: :created_by_id], [:channels, :users, column: :updated_by_id], [:slas, :users, column: :created_by_id], [:slas, :users, column: :updated_by_id], [:macros, :users, column: :created_by_id], [:macros, :users, column: :updated_by_id], [:chats, :users, column: :created_by_id], [:chats, :users, column: :updated_by_id], [:chat_topics, :users, column: :created_by_id], [:chat_topics, :users, column: :updated_by_id], %i[chat_sessions chats], %i[chat_sessions users], [:chat_sessions, :users, column: :created_by_id], [:chat_sessions, :users, column: :updated_by_id], %i[chat_messages chat_sessions], [:chat_messages, :users, column: :created_by_id], [:chat_agents, :users, column: :created_by_id], [:chat_agents, :users, column: :updated_by_id], [:report_profiles, :users, column: :created_by_id], [:report_profiles, :users, column: :updated_by_id], %i[karma_users users], %i[karma_activity_logs users], [:karma_activity_logs, :karma_activities, column: :activity_id], ] foreign_keys.each do |foreign_key| ActiveRecord::Base.transaction do begin add_foreign_key(*foreign_key) rescue => e Rails.logger.error "Inconsistent data status detected while adding foreign key '#{foreign_key.inspect}': #{e.message}" end end end end end