Загрузка изображения с помощью Grape и Carrierwave

Я в своем app/api/myapp/api.rb файле пишу простой метод регистрации:

params do
  requires :email, type: String,  regexp: /.+@.+/, allow_blank: false
  requires :password, type: String, allow_blank: false
  requires :name, type: String, allow_blank: false
  requires :surname, type: String, allow_blank: false
  requires :person, type: Integer, allow_blank: false
end
post :register do
    User.create!(email: params[:email],
                 password: params[:password],
                 name: params[:name],
                 surname: params[:surname],
                 remote_avatar_url: Faker::Avatar.image)
end

Как видите, я использую драгоценный камень несущей волны для хранения изображений моей модели User. Теперь я просто назначаю случайное изображение из драгоценного камня Faker.

Как получить изображение, отправленное клиентом, и назначить его моей новой модели?


person Mr.D    schedule 25.07.2015    source источник


Ответы (1)


Просто используйте Rack::Multipart::UploadedFile в качестве примера ниже.

desc 'Upload Image.'
params do
    requires :file, :type => Rack::Multipart::UploadedFile
    requires :id, :type => Integer
end
post ':id/avatar' do
    File.open(params[:file].tempfile, 'r') do |f|
        # Do whatever you need with this file. 
        # Here, you can store it in the server filesystem or in your database.
    end
end
person Marlon    schedule 26.07.2015
comment
Вы можете написать пример с методом create!? - person Mr.D; 26.07.2015
comment
Используя предоставленный пример, у вас есть доступ к файлу. Вы можете получить его имя файла и сохранить его как атрибут вашей модели. - person Marlon; 26.07.2015