2011-02-09 31 views
0

我希望有人可以看看這個,並給我建議如何讓這個行動更好。它適用於我喜歡的方式,但似乎沒有必要創建兩個模型實例。需要幫助update_attributes

我覺得我必須這麼做,因爲即使update_attributes在驗證失敗時不會更新數據庫,我仍然希望@user實例可用於在視圖中顯示原始@ user.photo。我正在使用回形針。

非常感謝。

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 2011-02-10 04:57:55