0
我想Carrierwave与一个RoR API集成,而我遇到这样的错误消息:Ruby on Rails的Carrierwave:ActiveRecord的:: RecordInvalid(验证失败:阿凡达不能为空):
ActiveRecord::RecordInvalid (Validation failed: Avatar can't be blank):
app/controllers/api/v1/user_controller.rb:10:in `upload'
用户控制器:
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
...
输出为:
params[:user][:email] => [email protected]
params[:user][:file] => #<File:0x007fbacc083318>
使用其余-CLIEN执行的API调用t宝石:
...
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
...
我有一种感觉是帖子不正确。
非常感谢!
你不能自己存储文件,所有你需要保存路径。这是错误的'@user.avatar = params [:user] [:file]' – 7urkm3n
是的,这是真的。我发现请求没有正确构建(我没有使用:multipart => true)这是我的新请求:request = RestClient :: Request.new( :method =>:post, :url =>'http ://'host.to_s +':'+ port.to_s +'/ api/user/upload', :payload => { :multipart => true, :email => email, :file = > file }, :accept => accept.to_s) –