app/models/page_groupers/childrenship.rb
class Childrenship < ApplicationRecord
include HasContentLinking
belongs_to :user, optional: true
belongs_to :character
belongs_to :child, class_name: 'Character', optional: true
# These values are used for detecting whether a related character is a male or female
#todo: proper gender extraction
MALE_VALUES = ['male', 'male.', 'm', 'man', 'guy', 'dude', 'patern', 'father']
FEMALE_VALUES = ['female', 'female.', 'f', 'woman', 'lady', 'gal', 'dudette', 'matern', 'matriarch', 'mother']
# after_create do
# this_object = Character.find_by(id: self.character_id)
# other_object = Character.find_by(id: self.child_id)
# if other_object.present?
# # If this character is marked having a child, we need to figure out whether it's the father or mother
# # of that child and create the proper association
# gender = gender_of_object this_object
# if gender == :male
# other_object.fatherships.create(character: other_object, father: this_object) unless other_object.fathers.include?(this_object)
# elsif gender == :female
# other_object.motherships.create(character: other_object, mother: this_object) unless other_object.mothers.include?(this_object)
# end
# end
# end
# after_destroy do
# # This is a two-way relation, so we should also delete the reverse association
# this_object = Character.find_by(id: self.character_id)
# other_object = Character.find_by(id: self.child_id)
# # If there's no linked object to modify, what are we even doing here?
# if other_object.present?
# gender = gender_of_object(this_object)
# if gender == :male
# other_object.fathers.delete(this_object)
# elsif gender == :female
# other_object.mothers.delete(this_object)
# elsif gender.nil?
# if other_object.fathers.include?(this_object)
# other_object.fathers.delete(this_object)
# elsif other_object.mothers.include?(this_object)
# other_object.mothers.delete(this_object)
# end
# end
# end
# end
# todo: move this somewhere more reusable
def gender_of_object object
return nil if object.nil?
return nil if object.gender.nil?
return :male if MALE_VALUES.include? object.gender.downcase
return :female if FEMALE_VALUES.include? object.gender.downcase
end
end