0

我想在我的应用程序用户能够上传文件与回形针尺寸验证错误4

至少width:800pxheight: 550px

创建的应用程序/模型/ dimensions_validator.rb文件 和代码

class DimensionsValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    dimensions = Paperclip::Geometry.from_file(value.queued_for_write[:original].path) 
    width = options[:width] 
    height = options[:height] 

    record.errors[attribute] << "Width must be at least #{width}px" if dimensions.width < width 
    record.errors[attribute] << "Height must be at least #{height}px" if dimensions.height < height 
    end 
end 

在我应用程序/模型/ gig.rb模型

validates :image, :dimensions => { :width => 800, :height => 550 } 

问:当我点击提交按钮,实际上并没有选择任意图片,它得来的错误说undefined method "path" for nil:NilClass 和它在红色标志着4号线是dimensions = Paperclip::Geometry.from_file(value.queued_for_write[:original].path)

也许我需要一个代码,以检查图像存在,像if image.present?但瓦特我会在这里包括吗?我在演出模式validates_attachment_presence :image

这已经使用是错误 error

这是我GigsController#更新

def update 
    if @gig.update(gig_params) 
     redirect_to @gig, notice: "Gig was successfully updated" 
    else 
     render "edit" 
    end 
    end 
+0

对不起,你的意思是在第一个o新来的?你能否写下它作为答案。谢谢。 –

+0

你能检查你的控制器是否允许params包含'image'?您还可以在日志输出中查找类似'Unpermitted parameter:image'的内容。 – Curtis

+0

是的,它是允许的。并且在日志中,我得到了 NoMethodError(未定义的方法路径为零:NilClass): app/models/dimensions_validator.rb:3:在'validate_each' app/controllers/gigs_controller。rb:71:'update' –

回答

3

试试这个。

validates :image, :unless => "image.queued_for_write[:original].blank?", dimensions: { width: 800, height: 550 } 
+0

谢谢。为什么这个工作? – Undistraction

0

我相信你可以添加其他条件,您的验证。所以,你可以尝试添加allow_blankif条件:

validates :image, dimensions: { width: 800, height: 550 }, allow_blank: true 

或可能:

validates :image, dimensions: { width: 800, height: 550 }, if: Proc.new {|gig| gig.image? } 
+0

它不起作用,它给出了绝对相同的错误,但是当我创建一个新的演出时,它与我当前的设置一起工作,但当我更新它时不工作。请参阅我编辑的问题,最后一个图片。 –

+0

我试图在本地重新创建您的情况。通过在自定义验证程序的开始处放置一个'byebug'语句,我能够验证验证程序是否*以上述任一方式执行*。 – Curtis

0

它可以使用这个gem图像宽度和高度的验证与Papercliphttps://github.com/evedovelli/image_validators

将它添加到您的包:

gem 'image_validators' 

并添加验证规则到模型:

validates :image, dimensions: { greater_than_or_equal_to: { width: 800, height: 550 } }