Thank you for your response Dino, but I still feel like I'm missing 
something because the last sentence of your Blob explanation confuses me.

Because of this, you have 2 different Blobs in your test case
>

If this is the same file attached twice on two different User model 
instances I'd expect: 

   - a single ActiveStorage::Blob to represent this single file
   - two ActiveStorage::Attachment entries to associate this single blob to 
   the two different Users.  
   
If we create any variants *then* another blob is created for the variant 
but to get two blobs right from the start feels to me like a bug.  
Shouldn't checksums be unique within the *active_storage_blobs* table in 
order to maintain the "One file, one blob"?  I apologize if I'm missing 
something incredibly obvious here and I appreciate your patience with me :)

Thanks again!

-Dan
  
On Friday, March 23, 2018 at 6:07:54 AM UTC-6, dixpac wrote:
>
> This is expected behaviour.
>
> *Blob* models are intended to be immutable in spirit. One file, one blob. 
> And if you want to do transformations of a given Blob, the idea is that 
> you'll simply create a new one, rather than attempt to mutate the existing 
> (though of course, you can delete that later if you don't need it). Because 
> of this, you have 2 different Blobs in your test case.
>
> *Checksum* is calculated from the content of the file(`data`), so  image `
> *town.jpg*` will always produce the same checksum since it is the same 
> image (not the same Blob :))
>
> I hope this helps
>
> On Friday, March 23, 2018 at 12:43:38 AM UTC+1, Dan Hanson wrote:
>>
>> I'm hoping to get some clarification on the expected behavior surrounding 
>> uploading the same file multiple times using ActiveStorage.  Currently each 
>> time the same file is uploaded a new ActiveStorage::Blob is created having 
>> a unique key but a shared checksum.  This behavior surprised me but I'm 
>> wondering if this is a bug or intended behavior.  The following test 
>> illustrates how I was expecting AS to behave:
>>
>> # activestorage/test/models/attachments_test.rb
>> test "attached blobs with same checksum are shared" do                   
>>       
>>   @user.avatar.attach io: StringIO.new("STUFF"), filename: "town.jpg", 
>> content_type: "image/jpg"
>>                                                                           
>>         
>>   second_user = User.create!                                             
>>       
>>   second_user.avatar.attach io: StringIO.new("STUFF"), filename: 
>> "town.jpg", content_type: "image/jpg"
>>                                                                           
>>        
>>   assert_equal @user.avatar.blob.checksum, second_user.avatar.blob.checksum 
>>    
>>   assert_equal @user.avatar.blob, second_user.avatar.blob # currently 
>> fails                     
>> end 
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to