【发布时间】:2014-11-22 20:56:13
【问题描述】:
我正在尝试使用 ajax 上传来使用 Railscarrierwave gem 上传文件。
在 Rails 模型中,如果我注释掉载波上传器,图像将加载
class Asset < ActiveRecord::Base
#mount_uploader :attachment, AttachmentUploader
end
这是上面注释掉carrierwave时的上传保存
Processing by Api::AssetsController#create as JSON
Parameters: {"asset"=>{"attachment"=>"C:\\fakepath\\wiz.jpg"}}
(0.1ms) begin transaction
SQL (0.3ms) INSERT INTO "assets" ("attachment", "created_at", "updated_at")
VALUES (?, ?, ?) [["attachment", "C:\\fakepath\\wiz.jpg"],
["created_at", "2014-11-12 21:19:50.456924"],
["updated_at", "2014-11-12 21:19:50.456924"]]
(7.8ms) commit transaction
但是,当我使用carrierwave上传器时,文件在发送到控制器的参数中正确传递,但是,它保存为nil
started POST "/api/assets.json" for 127.0.0.1 at 2014-11-12 13:27:59 +0000
Processing by Api::AssetsController#create as JSON
Parameters: {"asset"=>{"attachment"=>"C:\\fakepath\\wiz.jpg"}}
(0.1ms) begin transaction
SQL (0.3ms) INSERT INTO "assets" ("attachment", "created_at", "updated_at")
VALUES (?, ?, ?) [["attachment", nil],
["created_at", "2014-11-12 13:27:59.814416"],
["updated_at", "2014-11-12 13:27:59.814416"]]
(7.0ms) commit transaction
请求头有多个部分
Remote Address:127.0.0.1:4200
Request URL:http://localhost:4200/api/assets.json
Request Method:POST
Status Code:200 OK
Accept:*/*
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryX8gWNEUkD4hyVsxz
请求负载如下所示:
------WebKitFormBoundaryX8gWNEUkD4hyVsxz
Content-Disposition: form-data; name="asset[attachment]"
C:\fakepath\wiz.jpg
------WebKitFormBoundaryX8gWNEUkD4hyVsxz--
Rails 控制器
class Api::AssetsController < ApplicationController
def create
@asset = Asset.new(asset_params)
@asset.attachment = params[:asset][:attachment]
if @asset.save
render json: @asset, status: :ok
end
end
private
def asset_params
params.require(:asset).permit(:attachment)
end
end
【问题讨论】:
-
你能把你的上传文件和表单和你的模型一起添加吗
标签: ruby-on-rails-4 file-upload ember.js carrierwave