Rails在ajax请求上闪烁(不重新加载)

时间:2019-03-28 04:44:26

标签: ruby-on-rails devise

我正在构建一种Facebook克隆,该项目的要求之一是能够“点赞”帖子。

我很喜欢(我也在用户认证上使用了devise fwiw)。但是,当我尝试闪烁显示某个用户已经喜欢某个帖子(因为您不能多次喜欢)时,什么也没发生。

我的控制器代码:

LIKED

它的工作原理是位于用户的“主页”上,浏览其所有帖子,并在每个帖子上都带有“喜欢”选项。 (喜欢确实有效,但认为这值得注意)。

如果我只做LIKED,则刷新页面即可使用,但目前不执行任何操作。

“赞”链接如下所示:

 def like
    post = Post.find(params[:post_id])
    puts post
    like = post.likes.new(user_id: current_user.id)
    if like.save
      #nothing for now
    else
      flash.now[:alert] = "You have already liked that post"
    end
  end

2 个答案:

答案 0 :(得分:2)

在Rails中,有一个gem可用于ajax调用Flash消息 Toaster gem

application_helper.rb中创建一个方法

def custom_bootstrap_flash
  flash_messages = []
  flash.each do |type, message|
    type = 'success' if type == 'notice'
    type = 'error'   if type == 'alert'
    text = "
      <script>
        $(function () {
          toastr.#{type}(\"#{message}\");
        });
      </script>
    "
    flash_messages << text.html_safe if message
  end
  flash_messages.join("\n").html_safe
end

将其包括在您的布局application.html.erb

<%= custom_bootstrap_flash %>

然后在您的action.js.erb中使用烤面包机方法显示烤面包消息

toastr.success('Success.')
toastr.error('error')

我希望这是您正在寻找的东西。

答案 1 :(得分:1)

rails上的flash方法仅在成功重定向后显示。如果要在同一页面上显示消息,最好使用JS显示消息。