Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Carrierwave,Dropzone.js Rails 4,强参数_Ruby On Rails 4_Carrierwave_Strong Parameters_Dropzone.js - Fatal编程技术网

Ruby on rails 4 Carrierwave,Dropzone.js Rails 4,强参数

Ruby on rails 4 Carrierwave,Dropzone.js Rails 4,强参数,ruby-on-rails-4,carrierwave,strong-parameters,dropzone.js,Ruby On Rails 4,Carrierwave,Strong Parameters,Dropzone.js,我正在尝试使用Carrierwave和Dropzone.js上传多个图像,但在提交表单时出现以下错误 请注意,没有dropzone.js的相同表单工作正常,这意味着当我只是使用HTML5上传多个图像时 请参阅下面的散列,它是在我提交表单时创建的(使用dropzone通过ajax) “项目_图像_属性”=>[{“图像”= [#,@original\u filename=“artist4.jpg”、@content\u type=“image/jpeg”、@headers=“content-Dis

我正在尝试使用Carrierwave和Dropzone.js上传多个图像,但在提交表单时出现以下错误

请注意,没有dropzone.js的相同表单工作正常,这意味着当我只是使用HTML5上传多个图像时

请参阅下面的散列,它是在我提交表单时创建的(使用dropzone通过ajax)


“项目_图像_属性”=>[{“图像”=

[#,@original\u filename=“artist4.jpg”、@content\u type=“image/jpeg”、@headers=“content-Disposition:表单数据;name=\”项目[项目]_ 图像属性][][image][]\“文件名=\“artist4.jpg\”\r\n内容类型:image/jpeg\r\n“>,#,@original_filename=“feed1.jpg”,@con tent\u type=“image/jpeg”,@headers=“Content-Disposition:form-data;name=\”项目[project\u-images\u-attributes][[image][]\”;文件名=\“feed1.jpg\”\ r\n内容类型:image/jpeg\r\n“>,#,@original_filename=“gallery1.jpg”,@content_Type=“image/jpeg”,@headers=“内容处置: 表单数据;名称=\“project[project\u images\u attributes][[image][]\”;文件名=\“gallery1.jpg\”\r\n内容类型:image/jpeg\r\n“>]}],”项目参考 o“=>[”],“提交”=>“创建项目”}

不允许的参数:图像

请注意,我已经在我的控制器中白名单了图像参数,并且它使用HTML5工作,但不使用ajax和dropzone.js

有人知道如何解决这个问题吗


谢谢你

代码,让我了解我的结局:

  private
  def pin_image_params
    #params.require(:pin_image).permit(:photo) (not permitted)
    #params.require(:pin_image).permit(photo: [:'0']) (permitted but action handler error)
    #params.require(:pin_image)["photo"].values.first (stringify_keys error)
    params.require(:photos).values
  end
强参数不断返回未经许可的参数:photo。在控制台中,我看到参数正在编号,我唯一能访问它们的方法就是按编号潜水。尽管如此,尝试将它们直接传递到
create
时仍返回错误。这是因为模型无法理解编号散列的格式。它不够聪明,无法知道它需要遍历每个附加的图像。因此:

def create
   # so pin_image_params is an array of files basically
   @pin_images = pin_image_params.inject([]) do |memo, photo|
   # this pattern will store the memo into the @pin_images reference
      memo << PinImage.create(photo: photo)
   # keying it explicitly
   end
   if @pin_images.present?
      render json: { id: @pin_images.map(&:id) }, :status => 200
   else
      #  you need to send an error header, otherwise Dropzone
      #  will not interpret the response as an error:
      render json: { error: @pin_images.errors.full_messages.join(',')}, :status => 400
   end
end
def创建
#所以pin_image_params基本上是一个文件数组
@pin_images=pin_image_参数。注入([])do |备忘录,照片|
#此模式将备忘录存储到@pin_images引用中
备忘录200
其他的
#您需要发送一个错误标题,否则将发送Dropzone
#不会将响应解释为错误:
呈现json:{error:@pin_images.errors.full_messages.join(',')},:status=>400
结束
结束

我的控制器返回一个ID列表,这些ID被捕获在拥有PinImage(Pin)的模型的隐藏字段中。(这是在通过dropzone提交PinImage的ajax上的成功回调中完成的。)因此,当提交主模型时,我还必须处理在那里进行关联,但我发现我更喜欢这样做,而不是通过嵌套的属性来混日子。YMMV.

看看你提交表格的方式。是表单提交吗?上传完成后,Dropzone会通过ajax自动提交文件

共享控制器中列出属性的相关代码。