【问题标题】:Validate attachment content type Paperclip in Rails 2 application在 Rails 2 应用程序中验证附件内容类型回形针
【发布时间】:2015-08-14 07:20:23
【问题描述】:

在我的 Rails 2 应用程序中,产品图片是使用 Paperclip 作为插件上传的。我需要将图像类型限制为 jpeg 和 png,并且即使未上传图像也允许保存产品。

当前代码是

has_attached_file :master_image,
  :url  => "/images/products/:id/private/master.img",
  :path => ":rails_root/public/images/products/:id/private/master.img"

validates_attachment_content_type :master_image, :content_type => ['image/png', 'image/jpg'] , :message => "image must be jpg or png." , :allow_nil => true

我添加了:allow_nil => true,但它不起作用。

我在尝试保存没有图像时收到image must be jpg or png

是否可以仅在包含附件的情况下进行验证?

【问题讨论】:

    标签: ruby-on-rails ruby validation activerecord paperclip


    【解决方案1】:

    您在尝试不带图像保存时收到image must be jpg or png,因为如果图像不存在,这意味着内容类型也丢失,即它们不是jpgpng

    要完成您的任务,您可以添加一个自定义验证器,首先您将检查图像是否存在,如果存在,那么您将检查图像的:content_type

    将这些添加到您的 Product 模型中:

      validate :master_image_type_present
    
      def master_image_type_present
        if master_image.present? && !(['image/png', 'image/jpg', 'image/jpeg'].include? master_image_content_type)
          errors.add(:content_type, "invalid content type")
        end
      end
    

    而且,您的验证将按预期进行。

    【讨论】:

    • 在没有图像的情况下仍然没有通过。我尝试了所有我发现的方法。
    • 使用 image.present 时?它总是返回一个回形针对象。我尝试使用 image.exists?但是当已经保存了图像时它返回true。
    • 我要检查的是尝试保存时是否添加了图片作为附件。如果之前保存了图像,则不应返回 true。
    • validates_attachment_content_type :master_image, :content_type => ['image/jpeg', 'image/jpg', 'image/png'] 除非 :master_image
    • 我试过上面的代码。它允许保存,但也允许上传任何类型的图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多