/ / Грешка при потвърждаване на величината в релси 4 - рубинка върху релси, рубин, рубин на релси-4, модел-изглед-контролер, модел

Грешка при потвърждаване на величината на хартия в релсите 4 - рубинка върху релси, рубин, рубин на релси-4, модел-изглед-контролер, модел

Искам в моя потребител на приложението да може да качва файлове

поне width:800px и height: 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

Това е грешката грешка

И това е моят GigsController # актуализация

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

Отговори:

3 за отговор № 1

Опитайте тази.

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

0 за отговор № 2

Вярвам, че можете да добавите други условия към валидността си. Така че, може да опитате да добавите allow_blank или if състояние:

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

или може би:

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

0 за отговор № 3

Възможно е да се използва това gem за потвърждаване на ширината и височината на изображението с Paperclip: https://github.com/evedovelli/image_validators

Добавете го към пакета:

gem "image_validators"

И добавете правилата за валидиране към модела си:

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