如果参数为空,则渲染新表格

时间:2017-07-26 04:32:20

标签: ruby-on-rails ruby

我有一个视频上传表单。从计算机中选择并提交视频时,它可以正常工作。该视频已上传。但是,如果用户在未选择视频的情况下单击提交按钮,则会引发以下错误:

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

感谢任何帮助。感谢。

2 个答案:

答案 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。这样,它不会让用户在没有选择文件的情况下提交表单。