以下是我上传新个人资料图片的表单:
<%= form_for(@user, :html => { :multipart => true }) do |f| %>
<%= f.fields_for :avatar do |f| %>
<%= f.file_field :file_name %>
<%= f.submit 'Upload new Profile Image' %>
<% end %>
<% end %>
完美无缺。但是,当有人在选择图像之前按下提交按钮时,我的控制器会给我这个错误:
ActionController::ParameterMissing
在生产方面,它具有完全占用应用程序的效果。那我该如何解决这个问题?
class ImagesController < ApplicationController
before_action :set_user, only: [:create]
def create
@user.create_avatar(file_name: image_params[:avatar][:file_name])
redirect_to @user, success: 'Profile image created!'
end
private
def set_user
@user = User.find(params[:user_id])
end
def image_params
params.require(:user).permit(avatar: [:file_name])
end
end
答案 0 :(得分:1)
你有这个
def image_params
params.require(:user).permit(avatar: [:file_name])
end
所以它需要:用户参数作为&#34; params [:user]&#34;,但它没有,因为当你没有选择任何内容时,表单不会被&#39;甚至发送参数
你应该删除&#34;要求(:用户)&#34;并处理两个可能的情况,其中param不存在做不同的事情(可能:如果存在,上传,如果不存在则仅重定向并显示错误)。