class ChipValue < ApplicationRecord belongs_to :base_chip, class_name: 'Chip' belongs_to :secondary_chip, class_name: 'Chip' validates :base_chip_id, uniqueness: { scope: :secondary_chip_id } def self.create_full_chip_value(params) base_chip_id = params[:base_chip_id] secondary_chip_id = params[:secondary_chip_id] value = params[:value].to_f chips = Chip.where(id: [base_chip_id, secondary_chip_id]) base_chip = chips.first secondary_chip = chips.second mirrored_value = value.zero? ? 0 : (1 / value) base_chip_value = ChipValue.new(base_chip: base_chip, secondary_chip: secondary_chip, value: value) mirrored_chip_value = ChipValue.new(base_chip: secondary_chip, secondary_chip: base_chip, value: mirrored_value) transaction do base_chip_value.save mirrored_chip_value.save end end def self.update_full_chip_value(params) id = params[:id] new_value = params[:value].to_f mirrored_value = new_value.zero? ? 0 : (1 / new_value) chip_value = ChipValue.find(id) mirrored_chip_value = ChipValue.where(base_chip_id: chip_value.secondary_chip_id, secondary_chip_id: chip_value.base_chip_id).first chip_value.value = new_value mirrored_chip_value.value = mirrored_value transaction do chip_value.save mirrored_chip_value.save end end def self.destroy_full_chip_value(id) chip_value = ChipValue.find(id) mirrored_chip_value = ChipValue.where(base_chip_id: chip_value.secondary_chip_id, secondary_chip_id: chip_value.base_chip_id).first transaction do chip_value.destroy mirrored_chip_value.destroy end end end