我在我的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')
有人能提供我的问题的答案吗? 感谢您的帮助!
答案 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消息就足以让用户使用指向登录路径的链接登录。