我有一个奇怪的问题。我们有一个图像验证器,可以防止上传小于特定尺寸的图像。如果图像太小,则会将用户定向到带有闪存错误消息的/上传页面。
在我对应用程序进行了一些重大更改之前,它工作得很顺利;主要的重构,包括将代码移动到模块中,升级到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
答案 0 :(得分:3)
你应该:
@item = Item.new(params[:item])
而不是:
@item = Item.create!(params[:item])
发生错误是因为您正在调用create!
- 如果验证失败,此方法会引发错误。