• Sean McGivern's avatar
    Fix an N+1 in avatar URLs · 6ecf819f
    Sean McGivern authored
    This is tricky: the query was being run in
    `ObjectStorage::Extension::RecordsUploads#retrieve_from_store!`, but we can't
    just add batch loading there, because the `#upload=` method there would use the
    result immediately, making the batch only have one item.
    
    Instead, we can pre-emptively add an item to the batch whenever an avatarable
    object is initialized, and then reuse that batch item in
    `#retrieve_from_store!`. However, this also has problems:
    
    1. There is a lot of logic in `Avatarable#retrieve_upload_from_batch`.
    2. Some of that logic constructs a 'fake' model for the batch key. This should
       be fine, because of ActiveRecord's override of `#==`, but it relies on that
       staying the same.
    6ecf819f
object_storage.rb 11.9 KB