2016-04-18 3 views
0

こんにちは私はユーザがステータスを削除したときにjsテンプレートをレンダリングするステータスコントローラを持っています。これは、コントローラのコードです:私のdestroy.js.erbajax呼び出しの後でレールに通知を表示する

def destroy 
    @status = Status.where(id: params[:id]).first 
    if @status.present? 
    make_subject(@status, Constants::Subject::BREAK) 
    respond_to do |format| 
     format.html { redirect_to root_path, notice: 'deleted' } 
     format.json { head :no_content } 
     format.js { render layout: false } 
    end 
    end 
end 

、私が持っている:

$("#clear_status_<%= @status.id %>").fadeOut(); 

私は私が望む状況が正常に削除されるしたらフラッシュメッセージ

<div id = "notice_wrapper"> 
    <% if alert %> 
    <div class = "alerty"> 
     <p> <%= alert %> </p> 
    </div> 
    <% elsif notice %> 
    <div class = "notice"> 
     <p> <%= notice %> </p> 
    </div> 
    <% end %> 
</div> 

をレンダリングしている部分を持っていますステータスが正常に削除されたことをユーザーに通知する通知は、この部分をレンダリングすることによってそのメッセージを表示したい。 これをどうすれば実現できますか?

答えて

1

削除が成功したかどうかを回答で伝える方法が必要です。それがあれば、あなたの通知を示してください。

このため、@deleted変数を作成します。この変数はブール値になります。削除が成功するとtrueに設定され、それ以外の場合はfalseに設定されます。

<% if @deleted %> 
    $(".notice").html(<%= render 'notice_partial' %>) 
    <%= escape_javascript(alert("deleted successfully")) %> 
<% end %> 
$("#clear_status_<%= @status.id %>").fadeOut(); 
+0

これはうまくいきました..ありがとうございました。しかし、警告の代わりに、部分的にこれを行うことができます。 –

+0

ええ、確かに。あなたがする必要があるのは、部分を 'レンダリング 'するだけです。したがって、class = "notice"で部分的に 'notice_partial.html.erb'という名前のdivがあり、notice divでnotice_partialをレンダリングしたいと仮定して、これを反映するために私の答えを編集します。 –

+0

希望のホープ –

0

あなたはjQueryを使ってそれを行うことができます:あなたは、この種の何かを持っているだろう、

def destroy 
    @status = Status.find(params[:id]) 
    @deleted = false 
    if @status.destroy 
    @deleted = true 
    end 
    respond_to do |format| 
    format.html 
    format.json 
    format.js 
    end 
end 

destroy.js.erbファイル:後

コントローラのコードです。 'nav'の代わりに自分の要素を置く場合は、どこに通知したいのですか。

$('nav').after("<div class='alert alert-success'> Successfully Destroyed </div>"); 

$("#clear_status_<%= @status.id %>").fadeOut.fadeOut(250, function(){ 
    $(this).remove(); 
}); 

また、destroyメソッドを更新します。

def destroy 
    @status = Status.find_by(id: params[:id]) 
    if @status.present? 
    make_subject(@status, Constants::Subject::BREAK) 
    respond_to do |format| 
     #format.html { redirect_to root_path, notice: 'deleted' } # yr calling it async to destroy. format.html is needless. 
     format.json { head :no_content } 
     format.js 
    end 
    end 
end 
+0

答えをありがとうが、私は部分的にフラッシュを見せたい。私は私の質問を更新しました。チェックしてください。私はその部分を使ってメッセージをレンダリングしたい。 –

関連する問題