在上传的文件(特别是图像)上尝试实现验证

时间:2016-12-06 01:56:57

标签: ruby-on-rails carrierwave

基本上,我想要它,以便用户必须选择一个文件进行上传。然后,当用户按下表单提交按钮时,只有在用户选择了文件时才会成功。

我认为除了载波之外,我需要在Paperclip中使用validates_attachment之类的东西。无论用户是否选择了图像,我发布的代码始终会呈现recipe_images/new

模型

class RecipeImage < ApplicationRecord
    # upload images
    mount_uploader :image, ImageUploader
    validates_presence_of :image
    # associations
    belongs_to :recipe
end

控制器

class RecipeImagesController < ApplicationController
  def new
    @recipe_image = RecipeImage.new
    @recipe_id = params[:recipe_id]
    if current_user != Recipe.find(@recipe_id).user
      redirect_to recipe_path(@recipe_id)
    end
  end

  def create
    @recipe_image = RecipeImage.new(recipe_image_params)
    @recipe_id = params[:recipe_id]
    @recipe = Recipe.find(@recipe_id)
    if @recipe.recipe_images << @recipe_image
      redirect_to recipe_path(@recipe)
    else
      flash[:recipe_image_create] = 'Please choose an image.'
      render 'recipe_images/new'
    end
  end

  private
    def recipe_image_params
      params.permit(:image)
    end
 end

查看

<% if flash[:recipe_image_create] %>
    <strong><%= flash[:recipe_image_create]%></strong>
<% end %>

<%= form_for(@recipe_image, html: {multipart: true}) do |f| %>
  <p>Select Image</p>
  <div class="form-group">
    <%= f.file_field :image %>
  </div>

  <%= hidden_field_tag 'recipe_id', @recipe_id %>
  <%= f.submit 'Save',{class: 'btn btn-primary'}   %>
<% end %>

1 个答案:

答案 0 :(得分:0)

由于某些原因,创建向模型添加另一列修复了此错误。不知道为什么,但我会接受它。