1

我是 Rails 新手,我正在使用这个很棒的指南在新应用程序中创建一个简单的联系表单:contact-form-in-rails-3

一切正常,但我正在构建的应用程序将有一个带有联系表的实时流,供人们在观看时提交问题。问题是,当我目前发送消息时,我被重定向到root_path. 应用程序必须不重定向或重新加载页面,并且 Flash 以与验证 Flash 类似的方式显示。我从下面的控制器了解为什么会这样:

Class ContactController < ApplicationController

  def new
    @message = Message.new
  end

  def create
    @message = Message.new(params[:message])

    if @message.valid?
      NotificationsMailer.new_message(@message).deliver
      redirect_to(root_path, :notice => "Message was successfully sent.")
    else
      flash.now.alert = "Please fill all fields."
      render :new
    end
  end

end

但是,当我尝试将重定向行更改为以下内容时:

flash[:notice] = "消息发送成功。"

表格停止提交。

任何建议将不胜感激。

谢谢

4

2 回答 2

0

您需要在表单中添加 ajax,以下是如何添加此功能的示例:

http://stjhimy.com/posts/07-creating-a-100-ajax-crud-using-rails-3-and-unobtrusive-javascript

于 2013-08-14T22:19:14.060 回答
0

或者只是使用给定的信息和通知消息呈现相同的页面。

当您发送 ajax 时发生重定向时,您可以执行以下操作:

在您的控制器中:

respond_to do |format|
    format.js { head :no_content }
    format.html { head :no_content}
end

在你的 ajax 中:

所以基本上, event.preventDefault() 将禁止按钮正常运行,不应该重新加载页面。

$('#selector').click(function(event){
        event.preventDefault();
//Do whatever you want
    });
于 2013-08-15T00:46:50.757 回答