簡體   English   中英

Rails慣用語用於更新后通知

[英]Rails Idiom for Post-Update Notification

全部/任何人,

想知道流行的Rails習語是什么意思向最終用戶指示特定操作的成功/失敗嗎?

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

也就是說,很快想到了三種方法:

  1. 如果@ user.errors.blank? 然后顯示“成功”。 這在edit.html.erb的初始顯示上不起作用

  2. 根據@ user.save / update_attributes的結果,更新閃存以指示成功/失敗。 如果flash [:status] ==:success,則顯示'success'。

  3. 在更新操作中設置實例變量-非常類似於flash-@success == true。 如果@success則顯示'success'

我想念什么嗎? 也許我沒有看到關於AR的方法? 如果@ user.updated?

謝謝! 科里·威爾克森

我通常只將flash [:notice]用於通知消息,例如“您的帳戶已成功更新”,而將flash [:error]或error_msg_for用於錯誤消息。 我將error_msg_for用於驗證失敗引起的錯誤,並將flash [:error]用於所有其他類型的錯誤消息。 除非絕對必要,否則請注意不要將它們置於同一動作上。

如果他們的操作成功,我也盡量避免將使用返回給他們剛剛提交的表單。 我認為它發送矛盾的信號來發布成功消息,並將用戶發送回他們剛提交的表單。 我的經驗法則是“成功重定向,失敗呈現。” 例如,如果@user保存在更新中,我將redirect to @user ,但是如果保存失敗,將渲染:edit。

樣例控制器代碼。

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM