aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage/MIT-LICENSE
diff options
context:
space:
mode:
authorAbhishek Chandrasekhar <me@abhchand.me>2019-02-20 23:37:10 -0500
committerAbhishek Chandrasekhar <me@abhchand.me>2019-02-26 11:10:38 -0500
commit32438ed64fea7dbe52ea0898be3d4276e63baa78 (patch)
tree991616c425edbb3035c046037babe2a80315bab4 /activestorage/MIT-LICENSE
parent67732efcb658807929be0e968642ee1d90b3c986 (diff)
downloadrails-32438ed64fea7dbe52ea0898be3d4276e63baa78.tar.gz
rails-32438ed64fea7dbe52ea0898be3d4276e63baa78.tar.bz2
rails-32438ed64fea7dbe52ea0898be3d4276e63baa78.zip
[ActiveStorage] Ensure that the `_blob` association is properly loaded when attaching `::One`
Consider a model with `One` and `Many` attachments configured: class User < ActiveRecord::Base has_one_attached :avatar has_many_attached :highlights end === One Attachment After attaching `One` attachment (`:avatar`), we can see that the associated `_blob` record (`:avatar_blob`) still returns as `nil`. user.avatar.attach(blob) user.avatar_attachment.present? => true user.avatar_blob.present? => false # Incorrect! This is a false negative. It happens because after the attachment and blob are built: 1. The record already has its `_blob` association loaded, as `nil` 2. the `::Attachment` is associated with the record but the `::Blob` only gets associated with the `::Attachment`, not the record itself In reality, the blob does in fact exist. We can verify this as follows: user.avatar.attach(blob) user.avatar_attachment.blob.present? => true # Blob does exist! The fix in this change is to simply assign the `::Blob` when assigning the `::Attachment`. After this fix is applied, we correctly observe: user.avatar.attach(blob) user.avatar_attachment.present? => true user.avatar_blob.present? => true # Woohoo! === Many Attachments We don't see this issue with `Many` attachments because the `_blob` association is already loaded as part of attaching more/newer blobs. user.highlights.attach(blob) user.highlights_attachments.any? => true user.highlights_blobs.any? => true
Diffstat (limited to 'activestorage/MIT-LICENSE')
0 files changed, 0 insertions, 0 deletions