Emi Matchu
efda6d74ab
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!
26 lines
525 B
Ruby
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
|