【发布时间】:2015-12-26 00:19:57
【问题描述】:
我在我的 Rails 应用程序中使用渲染/重定向,我有以下控制器操作
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 之间的差异,或者这是一个涡轮链接问题?我尝试通过从我的 application.js 文件中删除 //= require turbolinks 并重新启动我的服务器来删除 turbo 链接.. 仍然是同样的问题。
有什么想法吗?
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax turbolinks