2017-04-19 143 views
0

我一直在努力解决这个问题。我试图用Dropclip.js上传多个“照片”模型和paperclip属性“附件”。目前我正在使用DropZone-Rails gem(我试过几个版本都有相同的结果)。Dropzone JS在Rails 4中未经允许的参数

# photo.rb 

class Photo < ActiveRecord::Base 

    has_attached_file :attachment, styles: { medium: "720x720>", thumb: "360x360>" }, default_url: "/images/:style/missing.png" 
    validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\Z/ 
    belongs_to :gallery 
    belongs_to :user 

end 

正如您在下面看到的,我已将附件参数列入白名单。

#photos_controller.rb 
class PhotosController < ApplicationController 
    before_action :set_photo, only: [:show, :edit, :update, :destroy] 


......... 

private 

# Use callbacks to share common setup or constraints between actions. 
def set_photo 
    @photo = Photo.find(params[:id]) 
end 

# Never trust parameters from the scary internet, only allow the white list through. 
def photo_params 

    params.require(:photo).permit(:attachment, :gallery_id) 

end 

悬浮窗负载如预期,此处配置有: Dropzone.autoDiscover = FALSE;

在我的模板:

$("#new_photo").dropzone({ 
    // restrict photo size to a maximum 1MB 
    maxFilesize: 4, 

    paramName: "photo[attachment]", 

    addRemoveLinks: true, 
    uploadMultiple: true, 

    success: function(file, response){ 
     $(file.previewTemplate).find('.dz-remove').attr('id', response.fileID); 
     $(file.previewElement).addClass("dz-success"); 
    } 

    }); 

    var myDropzone = new Dropzone(); 

我和悬浮窗的后备形式:

<%= form_for(Photo.new, html: { multipart: true, class: "dropzone"}) do |f| %> 
    <%= f.hidden_field :gallery_id, :value=>@gallery.id %> 
    <div class="fallback"> 
    <%= f.file_field :attachment %> 

    <%= f.submit "Upload" %> 
    </div> 
<% end %> 

我的日志对PARAMS输出(前得到过滤):

Parameters: {"utf8"=>"✓",  "authenticity_token"=>"5ftDcdfB1YpL4UF1fupC/I11xRx3HV5GYih5kshO/KSXzSrZS5Iu1wVRhbLFiyfQWQbwP3R5mxeoJLiM+cUJDg==", "photo"=>{"gallery_id"=>"13", "attachment"=>{"0"=>#<ActionDispatch::Http::UploadedFile:0x007f8058e13c48 @tempfile=#<Tempfile:/var/folders/jb/f02hpkhs3813_b6w_bvyxkxw0000gn/T/RackMultipart20170419-16050-8s5zd8.jpg>, @original_filename="624bbbf5b3c8a293950c8ed24a0c4eef.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"photo[attachment][0]\"; filename=\"624bbbf5b3c8a293950c8ed24a0c4eef.jpg\"\r\nContent-Type: image/jpeg\r\n">}}} 

这导致:

Unpermitted parameter: attachment 
{"gallery_id"=>"13"} 

任何帮助将不胜感激。我搜索了一切,并尝试了一切,似乎无法使它工作。谢谢。

回答

1

从您的型号Photo定义中,显然您要上传每个记录1个附件。但是您在控制器中收到的参数是用于上传多个附件的参数。

{ ..., attachment => { 0 => #<ActionDispatch::Http::UploadedFile }, ... } 

如果你想允许在您的PARAMS只有1个附件,您的PARAMS应该是形式:

{ ..., attachment => #<ActionDispatch::Http::UploadedFile, ... } 

dropzone options看,我会说,尝试在下降改变uploadMultiple: trueuploadMultiple: false区域配置。让我知道,如果问题仍然存在。

+0

你是对的!我在这方面花了太多时间。谢谢! – QNeville