0

プロフィールにajaxでコメントを入れてみました。誰かがコメント ページを追加すると、ページがリロードされないため、フラッシュ メッセージに問題があります。

私の comments_controller は次のようになります。

@comment = @profile.comments.includes(:user).new(params[:comment])
if @comment.save
  flash[:add_comment_success] = "Comment added"
  respond_to do |format|

    format.html {redirect_to :back}
    format.js
  end

else

フラッシュ メッセージでコメントを作成するための create.js.erb は次のようになります。

var flashError = "<%=flash[:add_comment_success]%>";
if (flashError){
  $("#flash_messages").html("<div class='messages_notify'><div id='message-add_comment_success'><p class='message_content'>" +flashError +  "</p></div></div>");
}

そして、私の app.js は次のようになります。

$(document).on("ready page:change", function() {
  noty_load();
});

function noty_load(){

$( ".messages_notify #message-add_comment_success" ).each( function(){
    generate('success', 'comment added');
});

}

ajaxの読み込みに問題があると思います。ajax がロードされているかどうか app.js をどうにかしてチェックインし、 noty_load() を実行する必要があります。firebugをチェックインすると、フラッシュ通知が表示されますが、ページをリロードしないと表示されません。ajaxリクエストが行われたときにnoty_loadを実行するにはどうすればよいですか?

4

1 に答える 1

0

noty_load()create.js.erb の最後で呼び出します。DRyer アプローチを使用する場合は、次のようにすべての js 応答にレイアウトを使用できます。

アプリケーション.js.erb:

<%= yield %>;
<% if flash.present? %>
  <% flash_message = flash.first %>
  $("#flash_messages").html("<div class='messages_notify'><div id='message-<%= j(flash_message.first) %>'><p class='message_content'><%= j(flash_message.last) %></p></div></div>");
  noty_load();
<% end %>
于 2013-08-26T12:32:47.757 に答える