【问题标题】:Unable to upload multiple images with Carrierwave无法使用 Carrierwave 上传多张图片
【发布时间】:2015-05-17 15:10:06
【问题描述】:

我在通过 Carrierwave 上传多张图片时遇到问题,我不确定这是错误还是用户错误(可能是后者)。我正在以一种相当标准的方式做所有事情(根据文档),所以这不起作用很奇怪。

我的 Gemfile 中有以下内容: gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'

我的image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_limit => [590, 590]
  end
  version :featured do
    process :resize_to_fill => [390, 390]
  end
  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

我的 article.rb 文件:

class Article < ActiveRecord::Base
  mount_uploaders :images, ImageUploader
end

我让参数从我的控制器传递:

def article_params
  params.require(:article).permit(:title, :images, :body)
end

_form.html.erb 部分使用:

<%= form_for @article, html: { multipart: true } do |f| %>
  <%= f.label :images %><br>
  <%= f.file_field :images, multiple: true %><br>
  <%= f.submit 'Update Article' %>
<% end %>

奇怪的是,当我上传两张图片时,我没有看到它们从更新方法传递到 article_params。

如果我撬开它,我可以看到:

params.require(:article).permit(:images)
Unpermitted parameters: title, images, body
=> {}

图像似乎是不允许的,即使我明确允许它...

关于这里可能不正确的任何线索?

【问题讨论】:

  • 您似乎错误地实现了多次上传。看this post。它解释了如何使用 Carrierwave 实现多次上传。
  • @maxd 我正在处理官方文档中的示例:github.com/carrierwaveuploader/… 我想知道这是否不是正确的方法......?

标签: ruby-on-rails carrierwave


【解决方案1】:

解决方案似乎是:

params.require(:article).permit(:title, :body, images: [])

如果你看一下images参数的pry,它的类型是一个数组:

> params[:article][:images].class
=> Array

来自文档:

要声明 params 中的值必须是允许的标量值数组,请将键映射到空数组:

params.permit(id: [])

来源:4.5.1 Permitted Scalar Values

【讨论】:

  • 天才!非常感谢。只有一个错误:应该是params.require(:article).permit(:title, :body, {images: []}) 图片显然需要用哈希包裹。
  • @raqhqu 任何线索我将如何通过复选框删除个人上传?使用 &lt;%= f.check_box :remove_images %&gt; 之类的东西会删除所有上传的文件。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多