在异常页面上呈现的Flash消息

时间:2013-06-10 15:28:56

标签: ruby-on-rails ruby-on-rails-3.2 validation minimagick

我有一个奇怪的问题。我们有一个图像验证器,可以防止上传小于特定尺寸的图像。如果图像太小,则会将用户定向到带有闪存错误消息的/上传页面。

在我对应用程序进行了一些重大更改之前,它工作得很顺利;主要的重构,包括将代码移动到模块中,升级到rails 3.2.13并从R Magick移动到Mini Magick。相当多的事情,我没有改变任何与验证器有关的事情。

现在由于某种原因,它不再使用flash消息重定向到/ upload页面。相反,在开发过程中,它会在名为“ActiveRecord::RecordInvalid in UploadController#create”的rails异常页面上显示错误消息。在生产中,在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

1 个答案:

答案 0 :(得分:3)

你应该:

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

而不是:

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

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