impress/app/models/parent_swf_asset_relationship.rb
Emi Matchu efda6d74ab Add cached fields to Item model for searching, but don't use them yet
This is the first part of a change to improve search performance, by
caching occupied zone IDs and supported body IDs onto the Item record
itself, instead of always doing joins with `SwfAsset`.

It's unfortunate, because part of the power of SQL is joins! But doing
joins with big tables, in ways that can't take advantage of indexes in
the same ways as we often want to, is… slow.

It's possible there's something I'm misunderstanding about SQL
optimization, and this _could_ be done with query optimization or
indexes instead of duplicating data like this? This complexity carries
the risk of data getting out of sync in unforeseen ways. But this is
what I know how to do, and it seems to be working, so! Okay!
2024-09-30 23:10:44 -07:00

26 lines
525 B
Ruby

class ParentSwfAssetRelationship < ApplicationRecord
self.table_name = 'parents_swf_assets'
belongs_to :parent, :polymorphic => true
belongs_to :swf_asset
after_save :update_parent_cached_fields
after_destroy :update_parent_cached_fields
def item=(replacement)
self.parent = replacement
end
def pet_state
PetState.find(parent_id)
end
def pet_state=(replacement)
self.parent = replacement
end
def update_parent_cached_fields
parent.try(:update_cached_fields)
end
end