0

我在我的 Rails 应用程序上的 ajax 中实现了一个“喜欢”按钮,我想知道为什么 alert 不起作用。

在我的控制器中,

 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 文件中包含 bootstrap popover如下是在我的控制器中使用“alert”的一种解决方法,但它不起作用。我希望在喜欢的数量下看到一个弹出窗口。

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

谁能回答我的问题?我感谢您的帮助!

4

1 回答 1

1

要显示由 Ajax 请求触发的 flash 消息,您可以在 like.js.erb 文件中执行类似的操作(这假定您的页面上存在 id 为“flash”的分区):

<% 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 %>

但是,仅显示一条提示用户使用登录路径链接登录的 Flash 消息可能就足够了。

于 2012-12-10T03:56:14.553 回答