【发布时间】:2015-05-12 20:04:11
【问题描述】:
我在 Rails 3 项目中有一个 Activerecord 模型,我正在尝试向其上传多个文件附件,我使用 MySQL 作为数据库。
在当前版本的 Carrierwave it talks about 中,现在能够将多个上传的文件存储在一个数组或 Json 类型的 ActiveRecord 字段中 - 所以我试图让这种方法发挥作用,但我不清楚如何实现这一点。
在所有教程/railscasts/SO 问题中,我只发现人们使用更传统的has_many 关系来链接到单独的附件记录。
在我的情况下,我有一个发票记录,其中每张发票都需要有多个“作业文件”附件,我正在遵循 Carrierwave README 中的示例。
我在模型中添加了一个 json 字段:
class AddJobfileToInvoice < ActiveRecord::Migration
def change
add_column :invoices, :jobfile, :json
end
end
在表单视图中我启用了多次上传
<%= form_for(@invoice, html: {class: 'invoice-form', multipart: true}) do |f| %>
.....
<%= f.file_field :jobfile, multiple: true%>
在我发布的参数中,我可以看到正确的多个上传数组以params[:invoice][:jobfile] 的形式出现:
params[:invoice][:jobfile]
=> [#<ActionDispatch::Http::UploadedFile:0x000000065996f0 @original_filename="test1.gif", @content_type="image/gif", @headers="Content-Disposition: form-data; name=\"invoice[jobfile][]\"; filename=\"test1.gif\"\r\nContent-Type: image/gif\r\n", @tempfile=#<File:/tmp/RackMultipart20150311-33374-1cqjv3i>>,
#<ActionDispatch::Http::UploadedFile:0x0000000659a0c8 @original_filename="test2.gif", @content_type="image/gif", @headers="Content-Disposition: form-data; name=\"invoice[jobfile][]\"; filename=\"test2.gif\"\r\nContent-Type: image/gif\r\n", @tempfile=#<File:/tmp/RackMultipart20150311-33374-15stv05>>]
然后我根据 Carrierwave 自述文件缓存了文件并保存了模型
@invoice = Invoice.new(params[:invoice])
@invoice.jobfile = params[:invoice][:jobfile]
@invoice.save
但是,一旦我保存发票模型,我就会收到 Jobfile You are not allowed to upload nil files 错误
谁能发帖或指出一个让 Carrierwave 使用单个 JSON(或数组)字段上传多个文件的工作示例?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 file-upload carrierwave jquery-file-upload