2012-05-09 2 views
0

私はProfileという名前のモデルがあります:新しいアバターの変更でエラーが発生した場合、古いアバターにどのようにフォールバックできますか?

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 
私は、画像を受け入れるだけに、それを検証しています

has_attached_file :avatar 

そして、私はそれを次のように表示しています:

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

私は、表示と編集の両方の動作から画像を変更できるようにしています。つまり、エラーの場合はリダイレクトする場所を知るためです。問題は、テキストファイルをアップロードすると、ビューはテキストタグへのhrefを持つ画像タグをレンダリングしようとします。これにより、何かが正しくレンダリングされなくなります。だから今はprofile.avatarがファイルを指しており、添付ファイルは保存されません。どのように元の画像にフォールバックできますか?

答えて

0

更新前に古いオブジェクトのコピーを保持していましたが、更新が失敗した場合はそのことを示しました。

関連する問題