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
|