javascript - rails - 在页面重新加载之前不显示 flash 消息?

标签 javascript jquery ruby-on-rails ajax turbolinks

我在我的 Rails 应用程序中使用渲染/重定向,我有以下 Controller 操作

class MessagesController < ApplicationController

 def create
    @message = Message.new(body: params[:message])
    if @message.save
      head :created
    else
      flash[:notice] = "failed!"
      render "home/index"
    end

  end

这是我的 home/index.html.erb 文件

<% if flash[:notice] %>
    <div class="notice"><%= flash[:notice] %></div>
  <% end %>

<form>
  <textarea name="message" id="message" placeholder="Type your message..."></textarea>
  <input type="submit"></input>
</form>

我正在使用 jquery 提交表单:

$(document).ready(function(){
  $('form').submit(function(e){
    e.preventDefault();
    var message_body = $('#message').val();
    $('#message').val('');
    $('#message').focus();
     $.ajax({
       url:    '/messages',
       method: 'post',
       data:   {message: message_body}
     });
  });
});

我的表单模型中有一个验证,确保消息正文不能为空 validates :body, presence: true

因此,当我创建一条空消息并点击提交时,它会呈现主页/索引模板。 (应该如此)

在 chrome 中,在开发控制台的预览/响应选项卡中,我可以看到 flash 消息,但是在我的实际应用程序中,我无法看到 flash 通知,直到我刷新页面..然后它才会显示。

我是否误解了页面呈现方式/render/redirect_to 之间的差异,或者这是一个 turbo 链接问题?我尝试通过从我的 application.js 文件中删除 //= require turbolinks 并重新启动我的服务器来删除 turbo 链接。仍然是同样的问题。

有什么想法吗?

最佳答案

您肯定误解了 flash_messages 在 rails 中的处理方式。

Flash 消息是用于呈现或重定向(然后呈现)的一次性计时器。

如果你设置了 flash[:notice] ,下一次 Rails 渲染某些东西时,flash_message 将可用(并且紧接着它就会消失)。

因为你想异步提交表单,你应该返回状态,然后在你的 ajaxcall 中你可以通过状态代码为用户提供一些反馈

这样的事情是可能的(未经测试)

ajax({url, method, statusCodes: function() {
 200: function() {
   //success
 },
 500: function() {
  //failure
 }
});

然后在你的 Controller 中返回一个 500 的 http 代码和对象的错误

else
  render status: 500, json: {errors: @message.errors}
end

关于javascript - rails - 在页面重新加载之前不显示 flash 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828390/

相关文章:

javascript - PhoneGap 3.0.0 锁定方向

jquery - Angular 2 和 jQuery - 如何测试?

javascript - 如何使用 JS 选择 <li> 标签

ruby-on-rails - 什么是在没有清除程序的情况下清除Rails中缓存的正确方法

ruby-on-rails - Rails 4 - Resque 后台作业中的印象派

javascript - 如何使用 canvas HTML5 绘制星星?

javascript - Leaflet geojson图层特征组鼠标指针

javascript - React-redux 递归渲染组件时未获取状态

javascript - 如何解析json输入数据

ruby-on-rails - Heroku rake 数据库 :migrate fails - Missing tasks/rails