Carrierwave无法使用引擎保存图像

Carrierwave can't save the image, using an engine

我正在学习使用 Carrierwave 第一步显然是上传图片并查看它是否有效地插入到数据库中。一个可能很重要的细节是,此代码是在 Rails 引擎中编写的,并且命名空间为 (Wanker)

我按照 gem 的说明生成了一个上传器,一切顺利 (Wanker::PicturesUploader)

我用 picture 字符串字段 (MySQL) 创建了一个模型 CompanyDetailImage 并添加了这一行

mount_uploader :picture, Wanker::PicturesUploader

然后我做了一个view和一个form

<%= f.fields_for [:wanker, @company, @company_detail, @company_detail_images] %>

    <%= i.label :picture %>
    <%= i.file_field :picture %>

<% end %>

控制器中的params[:company][:company_detail_image]["picture"]里面会有这个

[#<ActionDispatch::Http::UploadedFile:0x007fe613b81f40
   @content_type="image/png",
   @headers=
   "Content-Disposition: form-data; name=\"company[company_detail_image][picture][]\"; filename=\"Screen Shot 2015-02-04 at 8.18.58 PM.png\"\r\nContent-Type: image/png\r\n",
  @original_filename="Screen Shot 2015-02-04 at 8.18.58 PM.png",
  @tempfile=#    <File:/var/folders/2w/lw3glw5d58g25qvv4cx6yk0m0000gn/T/RackMultipart20150213-22947-np2et6>>]

这对我来说似乎不错。但是当我尝试这个

@company_detail_image = Wanker::CompanyDetailImage.new
@company_detail_image.picture = params[:company][:company_detail_image]["picture"]
@company_detail_image.save!

它returns这个

ActiveRecord::RecordInvalid: Validation failed: Picture You are not allowed to upload nil files, allowed types: jpg, jpeg, gif, png

有人知道为什么它看不到照片吗?谢谢你们 ;)

试试这个:

@company_detail_image.picture = params[:company][:company_detail_image]["picture"].first

这是因为您的 ["picture"] 参数返回的是数组而不是对象本身(这是该数组中的第一项)。