Виноград - Загрузка файла - Объявление параметров

Я пишу свой первый API, используя Grape, и я очень взволнован, и это звучит и ощущается отлично. Просматривая заметки, я не смог найти способ объявить параметры для файла.

Ниже приведен незавершенный класс для предоставления сведений о профиле, обновления сведений о профиле и загрузки изображения профиля. Я получил этот блок params do; end для определения обязательных полей и хотел бы сделать это и для загрузки файла. Но каким будет тип?

Пытался найти пример в Интернете, и те немногие, с которыми я столкнулся, не использовали его. Вероятно, тривиальный и глупый вопрос, но мне трудно его найти.

Обновление: для загрузки файла используется Carrier-wave и загрузчик под названием ProfilePictureUploader, но я сомневаюсь, что это так.

class AccountApi < Grape::API

  resource :account do

    desc 'View the current user profile'
    get :profile do
      present current_user, with: Presenters::UserPresenter
    end

    desc 'Update the current user profile'
    params do
      requires :email,      type: String,   desc: 'User email'
      requires :first_name, type: String,   desc: 'First name'
      requires :last_name,  type: String,   desc: 'Last name'
      requires :phone,      type: String,   desc: 'Phone number'
      requires :school_id,  type: Integer,  desc: 'School ID'
    end
    put :profile do
    end

    desc 'Upload profile picture'
    # params do
    #   requires :user, type: Hash do
    #     requires :profile_picture, type: <<??????>>, desc: 'User profile picture'
    #   end
    # end
    post :profile_picture do
      profile_picture = params[:user][:profile_picture]

      status = current_user.update(profile_picture: profile_picture)

      {
        status: status,
        size: profile_picture[:tempfile].size,
      }
    end

  end

end

Заранее спасибо за вашу поддержку. Удачного дня.


person Ziyan Junaideen    schedule 08.11.2015    source источник


Ответы (1)


Я думаю, что тип, который вы ищете, это Rack::Multipart::UploadedFile или просто File:

params do
   requires :user, type: Hash do
     requires :profile_picture, type: Rack::Multipart::UploadedFile, desc: 'User profile picture'
   end
 end

Это один из grape поддерживаемых типов, как здесь.

person Brozorec    schedule 08.11.2015
comment
Мне нужно купить пару очков. Что-то должно быть не так с моим зрением, чтобы не увидеть этот раздел в документации. Спасибо! - person Ziyan Junaideen; 08.11.2015