Прикрепить облачное изображение к модели Rails с помощью ActiveStorage - PullRequest
0 голосов
/ 07 января 2020

У меня есть модель пользователя

class User < ApplicationRecord
  has_one_attached :photo
end

Я пытаюсь:

  • загрузить изображение в Cloudinary через URL (это работает)
  • присоединить это для пользовательского экземпляра, который использует ActiveStorage (это не так)

Вот то, что я думаю, должно работать

user_img_response = Cloudinary::Uploader.upload("https://www.formula1.com/content/dam/fom-website/manual/Misc/2019-Races/Monaco2019/Monaco%20chicane%20HAM%20VER%20sized.jpg.transform/9col/image.jpg")

img_id = user_img_response["url"].match(/image\/upload.*/)[0]
signature = "#{img_id}##{user_img_response["signature"]}"

preloaded_file = Cloudinary::PreloadedFile.new(signature)
user = User.new(title: "Chris")
user.photo = preloaded_file

user.save
=> true

Однако фотография не прикрепляется к пользовательскому экземпляру

user.photo.attached? 
=> false

1 Ответ

2 голосов
/ 07 января 2020

Предполагается, что ваше приложение / models / photo.rb выглядит примерно так:

class Photo < ActiveRecord::Base
  attr_accessible :title, :bytes, :image, :image_cache

  belongs_to :album

  mount_uploader :image, ImageUploader

  validates_presence_of :title, :image
end

Что произойдет, если вы попытаетесь:

...
user = User.new(title: "Chris")
user.photo.image = preloaded_file # <---- assign file to image attribute
user.save

Вы также можете попытаться эмулировать этот пример приложения для вашего случая: https://github.com/cloudinary/cloudinary_gem/tree/master/samples/photo_album

РЕДАКТИРОВАТЬ : вы можете попробовать что-то вроде этого:

require 'uri'

file = URI.open(user_img_response["url"]) # use cloudinary url
photo.image.attach(io: file, filename: 'image.jpg') 

См .: https://blog.eq8.eu/til/upload-remote-file-from-url-with-activestorage-rails.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...