【问题标题】:Ruby on Rails Carrierwave: ActiveRecord::RecordInvalid (Validation failed: Avatar can't be blank):Ruby on Rails Carrierwave:ActiveRecord::RecordInvalid(验证失败:头像不能为空):
【发布时间】:2016-07-30 21:54:49
【问题描述】:

我正在尝试将 Carrierwave 与 RoR API 集成,但遇到以下错误消息:

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] => user@email.com
params[:user][:file] => #<File:0x007fbacc083318>

API 调用是使用 rest-client 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
...

感觉帖子不对。

非常感谢!

【问题讨论】:

  • 你不能自己存储文件,你只需要保存路径。这是错误的@user.avatar = params[:user][:file]
  • 是的,这是真的。我发现请求没有正确构建(我没有使用 :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 => 接受.to_s)

标签: ruby-on-rails api carrierwave rest-client


【解决方案1】:

试试这个,我不太确定。告诉我!

  def upload        
    @user = User.find_by(email: params[:user][:email])

    File.open(params[:user][:file]) do |f|
       @user.avatar = f
    end

    @user.save!
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2016-08-16
    • 2012-01-03
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多