Как добавить картинку из локальной папки в ActiveStorage (RoR)?

Для прикрепления аватарки пользователя (seed.rb) в ActiveStorage (в моем случае Ruby on Rails 6.0.1) я воспользовался методом attach.

Пример из официальной документации ActiveStorage:
user.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpg")

content_type - необязательный параметр.

В моем seed.rb я сделал следующим образом:

user.avatar.attach(io: File.new(Rails.root.join('public/userpic.png')), filename: 'userpic.png')
Картинку для аватарки userpic.png мы кладем в директорию public. При помощи Rails.root.join мы узнаем и передаем полный путь к RoR-приложению, а также добавляем к нему необходимую папку и имя файла:

2.6.5 :001 > Rails.root.join
=> #<Pathname:/Users/user/dev/web/lilproject>

2.6.5 :002 > Rails.root.join('public/userpic.png') => #<Pathname:/Users/user/dev/web/lilproject/public/userpic.png>

В качестве имени передаем строку 'userpic.png'.

Сам скрипт seeds.rb с добавлением аватарки пользователю выглядит примерно так:

...

user = User.new(
     email:                 "[email protected]",
     password:              "password",
     password_confirmation: "password",
 )

user.avatar.attach(io: File.new(Rails.root.join('public/userpic.png')), filename: 'userpic.png')

user.save!

...

 
Наверх