Add cache column to customer of family member

Created by admin@example.com on June 20, 2025

1
# Notes about cache column
2
# Migration
3
rails g migration AddMainFamilyMemberReferenceToCustomers main_family_member:references
4
# add_reference :customers, :main_family_member, foreign_key: {to_table: :customers}, after: :family_group_id
5
6
# customer.rb
7
belongs_to :main_family_member, class_name: 'Customer', optional: true
8
after_save :update_main_family_member_cache, if: :saved_change_to_family_group_id?
9
10
def update_main_family_member_cache
11
  return unless family_group_id.present?
12
13
  main_id = Customer.where(family_group_id: family_group_id).minimum(:id)
14
  return if id == main_id
15
16
  update_column(:main_family_member_id, main_id)
17
end
18
19
20
# rake task
21
Customer.where.not(family_group_id: nil).find_each do |customer|
22
  main_id = Customer.where(family_group_id: customer.family_group_id).minimum(:id)
23
  return if customer.id == main_id
24
25
  customer.update_column(:main_family_member_id, main_id)
26
end