我正在关注Carrierwave 上传的 Railscast 教程,并设置了相同的文件。如果我通过控制台上传文件,上传工作正常,但我的表单似乎没有正确发布。
我有我的基本表格,其中包括:
<%= f.label :receipt %><br>
<%= f.file_field :receipt %>
Rails 4 会自动enctype="multipart/form-data"
在表单上包含一个标签。
当我提交表单时,我会查看服务器日志。上传显示在参数中:
"receipt"=>#<ActionDispatch::Http::UploadedFile:0x007fcb25c624e0 @tempfile=#<Tempfile:/var/folders/ty/yks2xd9n76z9p49qzprvt1900000gn/T/RackMultipart20130903-53712-17zblz4>,
@original_filename="Avatar.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"expense[receipt]\"; filename=\"Avatar.jpg\"\r\nContent-Type: image/jpeg\r\n">},
但是,INSERT 语句没有提及我的收据字段或文件。没有任何错误。该文件也没有上传到我在 Carrierwave 中指定的目录。
关于这里可能出了什么问题的任何想法?这不是这个答案的重复,这是 jQuery Mobile 的问题。我真的对发生的事情感到困惑。
编辑:我可能也应该包括我的模型:
class Expense < ActiveRecord::Base
mount_uploader :receipt, ReceiptUploader
end
我也有一个由 Carrierwave 生成的股票上传器类:
class ReceiptUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"receipts"
end
end
编辑 2:这是我创建费用的控制器:
def new
@expense = Expense.new
end
def create
@expense = Expense.new(expense_params)
respond_to do |format|
if @expense.save
format.html { redirect_to @expense, notice: 'Expense was successfully created.' }
format.json { render action: 'show', status: :created, location: @expense }
else
format.html { render action: 'new' }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end