2009-10-21 55 views
0

全部/任何人,Rails的成語更新後通知

好奇普遍Rails的成語是什麼指示具體行動,以最終用戶的成功/失敗?

例如,假設您有一個寧靜的用戶資源,並且在所述用戶資源上調用更新;一旦更新完成,我已經將用戶路由回edit.html.erb - 我想指出操作是否成功(哪一個會說==沒有錯誤)。

也就是說,三種方法速速記:

  1. 如果@ user.errors.blank?然後顯示'成功'。這對編輯.html.erb的初始顯示不起作用

  2. 根據@ user.save/update_attributes的結果更新閃存以指示成功/失敗。如果閃光[:狀態] ==:成功,然後顯示'成功'。

  3. 在更新操作中設置實例變量 - 非常像flash - @success == true。如果@success然後顯示'成功'

我錯過了什麼嗎?也許有一種關於AR的方法,我只是沒有看到?如果@ user.updated?

謝謝! Cory Wilkerson

回答

1

我通常只使用flash [:notice]來獲取諸如「您的帳戶已成功更新」等通知消息,並且對於錯誤消息可能是flash [:error]或error_msg_for。對於所有其他類型的錯誤消息,我使用error_msg_for驗證失敗導致的錯誤和flash [:錯誤]。除非絕對必要,否則我會小心不要將它們設置爲同一行動。

我也嘗試避免將使用返回給他們剛剛提交的表單,如果他們的行動成功。我認爲它發出矛盾的信號來發布成功信息並將用戶發回他們剛剛提交的表單。我的經驗法則是「重定向成功,失敗時呈現」。例如,如果將@user保存在更新上,我將redirect to @user,但如果保存不成功,則會渲染:編輯。

樣本控制器代碼。

before_filter :identify_user, :except => :index 

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params) 
    flash[:notice] = "Your account was updated successfully" 
    redirect_to @user 
    else 
    render :action => :edit 
    end 
end 

def index 
end 

def identify_user 
    begin 
    @user = User.find(params[:id]) 
    rescue 
    flash[:error] = "You specified an unknown user" 
    redirect users_path 
    end 
end 

我的通知在我的應用程序佈局中被部分調用。

<div id="notification_area"> 
    <% flash.each do |key, value| %> 
    <% if value %> 
     <div id="<%=key%>"> 
     <%= value %> 
     </div> 
    <%end%> 
    <%end%> 
</div> 
+0

這與Rails的所有腳手架一致。 – 2009-10-21 19:18:48

+0

可能在哪裏我拿起練習。 – EmFi 2009-10-21 19:29:00