I have two models like this:-
Model 1 - card - contains a representation of data of interest for front page
attachment name = cardimage
Model 2 - user - c
old_avatar = model1.avatar;
model2.avatar.create(attachment: old_avatar.attachment);
model2.save;
It worked for me.
This should do the trick, you could use an after_create
callback if the models are associated, if not I would recommend doing it in the controller action that creates the card.
instance_of_model_one.cardimage = instance_of_model_two.avatar
instance_of_model_one.save
Suppose you have 2 models:
You have to copy profile_image
from User with id = 1
to Player with id = 10
. You can perform the following:
user = User.find(1)
player = Player.find(10)
player.profile_image = user.profile_image
player.save!
Sometimes this might save the file but with a file size of 0 Bytes. In such cases try the following:
user = User.find(1)
player = Player.find(10)
player.profile_image = user.profile_image.url
player.save!
This shall do the work!
Ideally, the approach mentioned by @cih should work:
instance_of_model_one.cardimage = instance_of_model_two.avatar
instance_of_model_one.save
But in my case, it was creating a blank file in S3. To resolve the issue, I tried the below approach and it worked:
instance_of_model_one.cardimage = instance_of_model_two.avatar.url
instance_of_model_one.save
Passing the URL instead of the object in the 1st statement resolved the issue.