我在更新表单中预览了附加图像.当用户在附件字段上获得验证错误时,会出现此问题.在这种情况下,图像缩略图网址就像上传图像时没有任何错误(它显示未在服务器上保存的文件名).
以下是我在视图中获取图片网址的方法:
<%= image_tag(@ product.photo.url(:medium))%>.
控制器:
def update
@product = Product.find(params[:id])
@product.update_attributes(params[:product]) ? redirect_to('/admin') : render(:new)
end
def edit
@product = Product.find(params[:id])
render :new
end
模型:
class Product < ActiveRecord::Base
<...>
@@image_sizes = {:big => '500x500>', :medium => '200x200>', :thumb=> '100x100>'}
has_attached_file :photo, :styles => @@image_sizes, :whiny => false
validates_attachment_presence :photo
validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'], :message => I18n.t(:invalid_image_type)
validates_attachment_size :photo, :less_than => 1.megabytes, :message => I18n.t(:invalid_image_size, :max => '1 Mb')
after_post_process :save_image_dimensions
<...>
end
UPD:最简单的解决方案是在@ product.update_attributes和<%@photo_file_url || = @ product.photo.url(:medium)%之前的控制器更新操作中添加@photo_file_url = @ product.photo.url(:medium) >在视图中.
最佳答案 我实际上有同样的问题,这就是我所做的(这看起来有点像黑客)但是工作并将在更新失败时显示默认或上一个图像
after_validation :logo_reverted?
def logo_reverted?
unless self.errors[:logo_file_size].blank? or self.errors[:logo_content_type].blank?
self.logo.instance_write(:file_name, self.logo_file_name_was)
self.logo.instance_write(:file_size, self.logo_file_size_was)
self.logo.instance_write(:content_type, self.logo_content_type_was)
end
end