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

我按照gem的指示生成了一个上传器,一切正常(Wanker::PicturesUploader

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

mount_uploader :picture, Wanker::PicturesUploader


然后我做了一个视图和一个表格

<%= 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!


它返回这个

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"]参数正在返回一个数组,而不是对象本身(这是该数组中的第一项)。

关于mysql - 载波无法使用引擎保存图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28508556/

10-12 12:59