0

Rails アプリケーションの ajax に「いいね」ボタンを実装しましたが、なぜアラートが機能しないのか疑問に思っています。

私のコントローラーでは、

 def like
    @post = Post.find(params[:id])
    if current_user
        if @like.empty?
            @post.num_likes += 1
            @post.save
        else
            alert = "You already liked the post :)"
        end
    end
  end 

そして私のlike.js.erbファイル

$("#post_like_<%= @post.id %>").html("<%= @post.num_likes %>");

ログインしていないユーザーをログイン ページにリダイレクトしたかったのですが、XML 要求でリダイレクトを使用することは不可能であることがわかりました。ユーザーが「いいね」ボタンをクリックしたときにログインするように要求すると同時に、警告メッセージを表示するための回避策はありますか?

次のようにjsファイルにブートストラップポップオーバーを含めると、コントローラーで「アラート」を使用する回避策になると思いましたが、機能しませんでした。いいねの数の下にポップオーバーが表示されることを期待していました。

$("#post_like_<%= @post.id %>").html("<%= @post.num_likes %>");
$("#post_like_<%= @post.id %>").popover('show')

誰でも私の質問に答えてもらえますか? 私はあなたの助けに感謝します!

4

1 に答える 1

1

Ajax リクエストによってトリガーされたフラッシュ メッセージを表示するには、like.js.erb ファイルで次のようにします (これは、ページに「flash」という ID を持つ部門が存在することを前提としています)。

<% if @alert %>
  // displays the alert message and makes it "blink"
  $("#flash").html("<%= escape_javascript(@alert)%>").effect('highlight', {}, 1500);
<% else %>
  $("#post_like_<%= @post.id %>").html("<%= @post.num_likes %>");
<% end %>

ユーザーを Ajax リクエストからログイン ページにリダイレクトするには、window.location. 再びあなたのlike.js.erbファイルに:

<% unless current_user %>
  window.location = '<%= new_user_session_url %>';
<% end %>

ただし、ログイン パスへのリンクを使用してユーザーにログインを促すフラッシュ メッセージを表示するだけで十分な場合があります。

于 2012-12-10T03:56:14.553 に答える