2011-02-09 12 views
0

私は誰かがこれを見て、この行動をより良くする方法について助言を与えることを望んでいました。それは私が好きなように動作しますが、2つのモデルインスタンスを作成する必要はありません。update_attributesのヘルプが必要

妥当性検査が失敗した場合でもupdate_attributesがデータベースを更新しないにもかかわらず、元の@ user.photoを表示するために@userインスタンスを使用できるようにしたいと思っていました。私はペーパークリップを使用しています。

ありがとうございます。

def edit_avatar 

    @user = User.find(@username_id) 
    if params['post_data'].present? 
     @user.update_attributes(params[:post_data]) 
     @errors = @user.errors 
     if @user.errors.count == 0 
      @start_jcrop = true 
     else 
      @user = User.find(@username_id) 
     end 
    end 
end 

答えて

0

代わりのモデルを再ロードするには、Dirty Changes機能を使用することができます。 または、新しいインスタンスを作成する代わりに、

@user.reload 

の代わりに使用できます。

@user = User.find(@username_id) 
    ... 
    else 
     @user.reload 
    end 
end 

@user = User.find(@username_id) 
if params['post_data'].present? 
    if @user.update_attributes(params[:post_data]) 
    @start_jcrop = true 
    else 
    @errors = @user.errors 
    @user.reload 
    end 
end 

を次のようにもビューを簡素化することができますし、リロードをスキップする場合

@user = User.find(@username_id) 
if params['post_data'].present? 
    if @user.update_attributes(params[:post_data]) 
    @start_jcrop = true 
    else 
    # render 
    # the previous image is available at 
    # @user.attribute_name_was 
    end 
end 
+0

はとてもありがとうございました! – David

+1

答えが問題を解決する場合は、答えを受け入れることを検討してください。 –