Создайте вложение Refile из HTTpary на модели Ruby с помощью mongo db

Создавая мобильное приложение с бэкэндом Rails, я хотел бы импортировать изображение профиля facebook из facebook в мою систему с помощью rails. Изображение профиля находится по некоторому URL-адресу, а изображения в моем бэкэнде сохраняются с помощью Refile.

Модель ProfilePicture:

class ProfilePicture
  include Mongoid::Document
  extend Refile::Mongoid::Attachment
  attachment :file, type: :image
  belongs_to :user

  field :created_at, type: String
  field :updated_at, type: String
end

Модель пользователя:

class User
  include Mongoid::Document

  field :created_at, type: String
  field :updated_at, type: String

  has_one :profile_picture
end

Код для установки изображения, используя HTTParty:

@user = User.find_by(id: 1)
@picture_data = HTTParty.get("https://graph.facebook.com/me/picture", query: {
    access_token: access_token,
    type: "large"
})
pic = ProfilePicture.new(file: @picture_data.body)
@user.update(profile_picture: pic)

Изображение профиля ПОЛУЧЕНО, поскольку я могу видеть данные в результате HTTP. Результатом DB действия вышеупомянутого действия "Update" будет новая запись ProfilePicture в mongodb со ссылкой на пользовательские данные, так что это тоже нормально. Таким образом, единственная проблема заключается в том, что вложение не сохраняется.

Как мне сохранить вложение?

1 ответ

Ответ состоял в том, что файл изображения, получаемый с Facebook, не был допустимым типом изображения для вложения. Изменение состояло в том, чтобы удалить тип из свойства вложения, например так:

class ProfilePicture
  include Mongoid::Document
  extend Refile::Mongoid::Attachment
  attachment :file
  belongs_to :user

  field :created_at, type: String
  field :updated_at, type: String
end
Другие вопросы по тегам