0
Ich versuche Carrierwave mit einem RoR API zu integrieren, und ich begegne diese Fehlermeldung:Ruby on Rails Carrierwave: Active :: RecordInvalid (Validierung fehlgeschlagen: Avatar kann nicht leer sein):
ActiveRecord::RecordInvalid (Validation failed: Avatar can't be blank):
app/controllers/api/v1/user_controller.rb:10:in `upload'
Benutzer Controller:
module Api
module V1
class UserController < ApplicationController
before_action :set_user, only: [:show, :update, :destroy]
#before_filter :authenticate_user_from_token!
def upload
@user = User.find_by(email: params[:user][:email])
@user.avatar = params[:user][:file]
@user.save!
p @user.avatar.url # => '/url/to/file.png'
p @user.avatar.current_path # => 'path/to/file.png'
p @user.avatar_identifier # => 'file.png'
end
...
Der Ausgang für:
params[:user][:email] => [email protected]
params[:user][:file] => #<File:0x007fbacc083318>
der API-Aufruf wird mit Rest-clien durchgeführt t gem:
...
response = RestClient.post 'http://' + @host.to_s + ':' + @port.to_s + '/api/user/upload', {'user' => { 'email' => email, 'file' => File.new("/Users/admin/Desktop/me.jpg", 'rb')}}.to_json, :content_type => :json
...
Ich habe das Gefühl, dass die Post nicht korrekt ist.
Vielen Dank!
Sie können die Datei nicht selbst speichern, alles, was Sie speichern müssen, ist Pfad. das ist falsch '@user.avatar = params [: user] [: file] ' – 7urkm3n
Ja, das stimmt. Ich habe festgestellt, dass die Anfrage nicht korrekt erstellt wurde (ich habe nicht verwendet: multipart => true) Das ist meine neue Anfrage: Anfrage = RestClient :: Anfrage.new ( : method =>: post, : url => 'http : // '+ host.to_s +': '+ port.to_s +'/api/benutzer/upload ', : payload => { : multipart => true, : email => email, : datei = > Datei }, : accept => accept.to_s) –