Ruby on rails 4 Dropzone.js ActionController::ParameterMissing配置文件图像上载
我正在尝试将Dropzone.js实现为用户scaffold的拖放配置文件照片上传程序 在我的RubyonRails中,我创建了Ruby on rails 4 Dropzone.js ActionController::ParameterMissing配置文件图像上载,ruby-on-rails-4,dropzone.js,Ruby On Rails 4,Dropzone.js,我正在尝试将Dropzone.js实现为用户scaffold的拖放配置文件照片上传程序 在我的RubyonRails中,我创建了userscaffold,它有一个配置文件照片(实现由回形针处理) 我想创造一种体验 用户编辑同一页面上的所有详细信息(包括个人资料照片) 在编辑/用户/x页面的第一次加载时,加载当前图像 当用户将图像放置在表单部分上时,图像将作为预览呈现 如果单击“取消”,将恢复以前的图像 我提出的方法是创建一个tempUploads表,用于存储拖放到Dropzone中的所有图像/文
user
scaffold,它有一个配置文件照片(实现由回形针处理)
我想创造一种体验
Uploads
表,用于存储拖放到Dropzone中的所有图像/文件。成功上传后,它会将图像的id返回到表单中,然后一旦用户单击“保存”,图像的id将与表单一起发布,并在用户和图像之间创建链接
我对stack overflow社区有两个问题:
ActionController::ParameterMissing(param缺失或值为空:Upload):
我做错了什么<%= form_with(model: user, local: true) do |form| %>
<div class="form-group">
<% if user.errors.any? %>
<div id="error_explanation" class="row">
<h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name %>
<%= form.text_field :name, id: :user_name, :class=> "form-control" %>
</div>
<div id="profile-photo" class="field dropzone">
<%= form.file_field :profile, :class=> "fallback"%>
</div>
<div class="field">
<%= form.label :role %>
<%= form.text_field :role, id: :user_role, :class=> "form-control" %>
</div>
<div class="actions">
<%= form.submit %>
</div>
</div>
<% end %>
以下控制器#操作
My request.request_参数如下所示:
Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007f8fe120b278 @tempfile=#<Tempfile:/var/folders/rp/79zzx36504z9kp7srj55pxk80000gn/T/RackMultipart20170804-3814-13pid57.jpg>, @original_filename="tokyo.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"tokyo.jpg\"\r\nContent-Type: image/jpeg\r\n">}
参数:{“文件”=>
我怀疑这与dropzone.js文件使用的参数名有关。如果打开dropzone.js文件,您将看到paramName值默认为“file”
尝试将此行更新为以下内容:
paramName:'user[profile]'
(或者,不管您如何设置用户模型的文件字段属性,我只是从您的帖子中推断出这一点,这里可能有误)
例如,在我的例子中,my Images表有一个名为“file”的列,该列是上载图像的位置。一旦我将paramName更新为“image[file]”,一切都按预期开始工作,强params被POST请求适当填充。我怀疑这与dropzone.js文件用作paramName的内容有关。如果打开dropzone.js文件,您将看到paramName值默认为“file” 尝试将此行更新为以下内容:
paramName:'user[profile]'
(或者,不管您如何设置用户模型的文件字段属性,我只是从您的帖子中推断出这一点,这里可能有误)
例如,在我的例子中,my Images表有一个名为“file”的列,该列是上载图像的位置。一旦我将paramName更新为“image[file]”,一切都按预期开始工作,强参数被POST请求适当填充。Hi Anthony!你能解决这个问题吗?我自己也遇到了类似的问题……嗨,安东尼!你能解决这个问题吗?我自己也遇到了类似的问题。。。
# POST /uploads
# POST /uploads.json
def upload
puts request.request_parameters
@upload = Upload.new(upload_params)
if @upload.save
puts @upload.id
# format.html { redirect_to @upload, notice: @upload.id }
# format.json { render :show, status: :created, location: @upload }
else
# format.html { render :new }
# format.json { render json: @upload.errors, status: :unprocessable_entity }
end
end
def upload_params
params.require(:Upload).permit(:photo)
end
Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007f8fe120b278 @tempfile=#<Tempfile:/var/folders/rp/79zzx36504z9kp7srj55pxk80000gn/T/RackMultipart20170804-3814-13pid57.jpg>, @original_filename="tokyo.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"tokyo.jpg\"\r\nContent-Type: image/jpeg\r\n">}