0

我有一个奇怪的问题。我们有一个图像验证器,可以防止上传小于特定尺寸的图像。如果图像太小,它会将用户引导到 /upload 页面,并显示 Flash 错误消息。

在我对应用程序进行了一些重大更改之前,它运行良好;R Magick主要重构,包括将代码移动到模块中、升级到rails 3.2.13 以及从Mini Magick. 相当多的事情,我没有改变任何与验证器有关的东西。

现在由于某种原因,它不再使用 Flash 消息重定向到 /upload 页面。相反,在开发中,它会在名为“”的 rails 异常页面上显示错误消息ActiveRecord::RecordInvalid in UploadController#create。在生产中,在 Heroku 上,它会响应 422 页面,“您想要的更改被拒绝”。

有任何想法吗?

在控制器中创建动作

  def create
    @item = Item.create!(params[:item])
    if @item.save
      redirect_to crop_url(item_id: @item.id)
    else
      error_msg = @item.errors[:base]
      redirect_to upload_url, flash: { errors: error_msg }
    end
  end

upload_process 模块中的验证方法

def validate_minimum_image_size
  geometry = cover.geometry
  if (! geometry.nil?)
    width = geometry[0]
    height = geometry[1]
  end
  unless (width >= 540 && height >= 540)
    errors.add :base, "Oops! Your image is too small... Dimensions must be at least 540x540 pixels!"
  end
end

视图中的错误消息 (HAML)

.error
  .pink
    - if flash.present?
      - if flash[:errors].present?
        - flash[:errors].each do |err|
          = err
4

1 回答 1

3

你应该有:

@item = Item.new(params[:item])

代替:

@item = Item.create!(params[:item])

由于您正在调用而发生create!错误 - 如果验证失败,此方法会引发错误。

于 2013-06-10T15:33:11.703 回答