10

Tôi đã có một mô hình đường ray sử dụng Kẹp giấy trông như thế này:Rails - Paperclip xác nhận kích thước tệp đính kèm khi không được?

has_attached_file :image, :styles => { :normal => ['857x392#', :png] }, 
        :url => '/assets/pages/:id/:basename.:extension', 
        :path => ':rails_root/public/assets/pages/:id/:basename.:extension' 

    validates_attachment_size :image, :less_than => 2.megabytes 

Khi cố gắng để tạo ra một kỷ lục của mô hình này mà không có một tập tin đính kèm để tải lên, sai số xác nhận sẽ được trả về:

có vấn đề với các lĩnh vực sau:

* Image file size file size must be between 0 and 2097152 bytes. 

tôi đã thử qua cả : allow_blank => true và: allow_nil => true sau câu lệnh xác nhận trong mô hình, nhưng cả hai đều không hoạt động.

Làm cách nào để cho phép tham số: hình ảnh trống?

Trả lời

1

xác nhận Kẹp giấy của chỉ kiểm tra phạm vi, và không quan tâm đến :allow_nil => true

Những gì bạn có thể làm là cố gắng thiết lập :min => nil hoặc :min => -1, có lẽ đó sẽ làm việc.

Cập nhật: Điều này sẽ không hoạt động trong phiên bản mới nhất của Paperclip vì chúng đã thay đổi cách xác thực hoạt động. gì bạn có thể thử thay thế là:

validates_attachment_size :image, :less_than => 2.megabytes, 
    :unless => Proc.new {|model| model.image } 
+0

Chỉ cần thử điều này, không hoạt động. – ground5hark

+0

hmm, bạn sử dụng phiên bản kẹp giấy nào (bạn có thể tìm phiên bản trong nhà cung cấp/plugins/paperclip/lib/paperclip.rb)? –

+0

Tôi vừa thử tìm ra điều này một vài phút trước. Tôi trở lại đây để báo cáo kết quả của tôi và than ôi, chúng gần giống với của bạn. Đối với bất kỳ ai khác có vấn đề này, bạn cũng có thể sử dụng hàm băm: Proc.new {| model | model [: image] .nil? } – ground5hark

6
validates_attachment_size :image, :less_than => 25.megabytes, 
          :unless => Proc.new {|m| m[:image].nil?} 

công trình hoàn hảo cho tôi

9

validates_attachment_size: hình ảnh,: trong => 0.megabytes..2.megabytes

hoạt động ngay bây giờ

0

Hãy thử mã sau.

validate :image_present 

def image_present 
    if image.present? && image_file_size < 2.megabytes 
    errors.add(:file_size, "file size must be between 0 and 2 megabytes.") 
    end 
end 
Các vấn đề liên quan