Rails 3警报不能使用Ajax

时间:2012-12-10 01:03:36

标签: javascript ruby-on-rails ajax alert

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

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

有人能提供我的问题的答案吗? 感谢您的帮助!

1 个答案:

答案 0 :(得分: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 %>

通过更改window.location,可以将用户从Ajax请求重定向到登录页面。再次在您的like.js.erb文件中:

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

但是,仅显示一条Flash消息就足以让用户使用指向登录路径的链接登录。