如果更改新头像导致错误,我如何回退旧头像?

时间:2012-05-09 14:06:37

标签: ruby-on-rails paperclip

我有一个名为Profile的模型:

has_attached_file :avatar

我正在验证它只接受图像,但是:

  validates_attachment_size :avatar,:less_than => 2.megabytes
  validates_attachment_content_type :avatar, :content_type => /^image\/(jpg|jpeg|pjpeg|png|x-png|gif)$/, :message => 'file type is not allowed (only jpeg/png/gif images)'

控制器操作实现如下:

@profile = Profile.find(params[:id])
if @profile.update_attributes(params[:profile])
  redirect_to @profile, notice: "Profile was updated"
else
  from_render = params[:render]
  from_render = "show" if !["show","edit"].include?(from_render)
  respond_to do |format|
    format.html { render :action => from_render }
  end
end

在视图中,我将其显示为:

  <%= image_tag profile.avatar.url(:medium) %>

我允许从显示和编辑操作中更改图片,因此其他(在发生错误时知道重定向的位置)。问题是,如果我上传文本文件,视图将尝试渲染图像标记,该标记具有文本文件的href。这会导致呈现不正确的内容。所以,现在,profile.avatar指向该文件,并且不保存附件。如何回退原始图像?

1 个答案:

答案 0 :(得分:0)

我在更新之前保留了旧对象的副本,如果更新失败,我就会显示。