2016-04-09 3 views
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!

+1

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

+0

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) –

Antwort

0

Versuchen Sie diese, ich bin mir nicht ganz sicher. Gib mir Bescheid!

Verwandte Themen