我有一个视频上传表单。从计算机中选择并提交视频时,它可以正常工作。该视频已上传。但是,如果用户在未选择视频的情况下单击提交按钮,则会引发以下错误:
ActionController::ParameterMissing in VideosController#create
param is missing or the value is empty: video
我在这里做错了什么?
这是我的视频控制器:
class VideosController < ApplicationController
before_action :find_userinfo
before_action :find_video, only: [:destroy]
before_action :authenticate_user!, only: [:new]
def index
end
def new
@video = Video.new
end
def create
@video = Video.new(video_params)
@video.userinfo_id = @userinformation.id
@video.user_id = current_user.id
if @video.save
redirect_to userinfo_path(@userinformation)
else
render 'new'
end
end
def edit
end
def update
end
def destroy
@video.destroy
redirect_to userinfo_path(@userinformation)
end
private
def video_params
params.require(:video).permit(:introvideo)
end
def find_userinfo
@userinformation = Userinfo.friendly.find(params[:userinfo_id])
end
def find_video
@video = Video.find(params[:id])
end
end
我的表单视图:
<%= simple_form_for([@userinformation, @userinformation.videos.build]) do |f| %>
<%= f.file_field :introvideo%>
<%= f.button :submit, 'Upload video'%>
<% end %>
我尝试将以下代码添加到我的控制器中,但仍然无法正常工作:
def create
@video = Video.new(video_params)
@video.userinfo_id = @userinformation.id
@video.user_id = current_user.id
if @video.video_params.empty?
render 'new'
end
if @video.save
redirect_to userinfo_path(@userinformation)
else
render 'new'
end
end
感谢任何帮助。感谢。
答案 0 :(得分:1)
要正确检查video
是否为空,您可以这样做:
def create
return render 'new' if params[:video].blank?
@video = Video.new(video_params)
@video.userinfo_id = @userinformation.id
@video.user_id = current_user.id
if @video.save
redirect_to userinfo_path(@userinformation)
else
render 'new'
end
end
答案 1 :(得分:0)
如果有人需要知道,我的方式是,我在表单中required: true
的末尾添加了file_field
。这样,它不会让用户在没有选择文件的情况下提交表单。