2016-05-01 3 views
-1

私はモデルSnippitを持っています。リストからスニッピットを削除してから、削除されたというアラートをすべて表示するようにしてください。私は実際の削除を行う方法を考え出しましたが、アラートは作成しませんでした。ここで ページリロードのないアラートRails AJAX

はコードです:

snippits_controller.rb

def destroy 
    @snippit = Snippit.find(params[:id]) 
    @snippit.destroy 
    respond_to do |format| 
     format.html { redirect_to snippits_url} 
     format.json { head :no_content } 
     format.js {render :alert => "Sippit destroyed. "} 
    end 
    end 

destroy.js.erb

$('#snippit_<%= @snippit.id %>').remove(); 

index.html.erb

<% @snippits.each do |snippit| %> 
     <span class="panel panel-default" id="snippit_<%= snippit.id %>"> 
     <%= link_to edit_snippit_path(snippit), :class => "text" do %> 
     <div class="panel-body"> 
     <h3 class="text"><%=snippit.title%></h3> 
      <p class="trash"><%= link_to snippit, method: :delete, remote: true do %> 
      <i class="fa fa-2x fa-trash-o"></i> 
      <% end %></p> 
      </div> 
      <% end %> 
      </span> 
    <% end %> 

任意およびすべてのヘルプは大歓迎です:)

答えて

2

をあなたはJSアラート応答をしたい場合は、次の代わりに

format.js {render js: "alert('Sippit destroyed.');"} 

format.js手段の上にレンダリングするような何かをしたいと思いますあなたはJSレスポンスをレンダリングしています。あなたのアラートrender :alert => "Sippit destroyed. "は、flash[:alert]がHTMLページでレンダリングされるが、JSレスポンスをレンダリングしているので、上記のJSアラートの実装を行うか、HTMLページを部分的に更新してフラッシュメッセージを更新する

def destroy 
    @snippit = Snippit.find(params[:id]) 
    @snippit.destroy 
    respond_to do |format| 
    format.html { redirect_to snippits_url} 
    format.json { head :no_content } 
    format.js { flash.now[:alert] = @snippit.destroyed? ? 'Sippit destroyed.' : @snippit.errors.full_messages } 
    end 
end 
:以下

destroy.js.erb

$('#snippit_<%= @snippit.id %>').remove(); 
$('#flash_container').html('<%= j render partial: "flash_container" %>'); 

UPDATE(上記destroy.js.erbを用いた方法2のために追加の作業コントローラコード)のようなものによって

format.jsの上に障害ハンドラコードを追加しました。 @snippitが正常に破壊された場合、または「@snippit」が破壊されていない場合は、「何らかのエラーの破壊に失敗しました」のいずれかにフラッシュ警告メッセージを設定します。

+0

私は両方の方法を試しましたが、どちらもうまくいきませんでした。試してみると、すべてが機能しなくなりました。私は2番目の方法で何をすべきかをかなり理解していませんが。私のアラートラッパーは 'alert_wrapper'というIDを持ち、実際のアラートIDは' alert'です。そこから私を導くことができますか? – Xavier

+0

オプション2を使用したときにコントローラがどのように見えるかを表示するために自分の答えを更新しました: 'destroy.js.erb' –

+0

'

...
'を別の部分ファイルに入れる必要があります。 alert wrapperが 'application.html.erb'の中にあるとしたら、それらを部分ファイル('/layouts/_alert_wrapper.html.erb')に移動し、その部分ファイルを 'application.html.erb'にレンダリングします: '<%=部分的レンダリング: 'alert_wrapper'%>'。今度は部分的に移動したので、AJAXを通して警告ラッパーを上記のように簡単に更新できます: '$( '#alert_wrapper')。html( '<%= j render partial:" alert_wrapper "%> '); ' –

関連する問題