rails 4中的Flash消息不显示(在partial和modal中)



问题在简短:我在rails 4应用程序(4.1.8)工作,我试图得到flash[:notice]flash[:alert]显示在一个形式下。

两个控制器:landingpage_controllercontacts_controllerlandingpage_controller通过其show动作提供静态登陆页面,contacts_controller具有newcreate动作,将联系人存储在db表中。

在静态登陆页面上,带有id="contact-modal"的模态包含带有simple_form_for @contact的部分(见下文)。在提交表单时,如果字段没有全部填写,则不创建 db-entry;如果字段已填写,则创建 db-entry。

不显示flash消息。

想要输出:

理想情况下,局部将在不离开/关闭模态的情况下重新加载,要么是:一个成功消息和一个空表单,要么是一个警告消息和提交时的表单。我如何做到这一点?

控制器:app/controllers/contacts_controller.rb

class ContactsController < ApplicationController
  def new
    @contact = Contact.new
    render layout: "contact"
  end
  def create
    @contact = Contact.new
    respond_to do |format|
      if @contact.save
        flash[:notice] = "Success"
        format.js
      else
        flash[:alert] = "Error"
        format.js
      end
    end
  end

  private
  def contact_params
    params.require(:contact).permit(:email, :structure, :message_content)
  end
end
格式:app/views/contacts/_new.html.haml
= simple_form_for @contact, html: { id: "contact-form"} do |c|
  = c.input :email
  = c.input :structure
  = c.input :message_content
  = c.button :submit
.messages-container
  = if flash[:notice]
    %p
      = flash[:notice]
  = if flash[:alert]
    %p
      = flash[:alert]

路线:

resources :contacts, only: [:new, :create]

我知道部分重新加载可能涉及AJAX。我已经读了几个关于这个的StackOverflow问题,但还没能弄清楚。请看这里,这里和这两篇博客文章:jetthoughts和ericlondon。

非常感谢您的帮助

你的代码中有几个问题:

  1. 视图,以下划线开头的被称为部分,不是完整的动作,但只是可重用的视图代码的一部分(你不重定向到他们,而是使用render,因为你通常不想要一个完整的页面重新加载。
1.1将_new.html.haml重命名为_form.html.haml 2.1创建一个新的视图new.html.erb (我猜你已经有了,否则你的new动作可能无法正常工作)内容= render 'form'

根据我的理解,你不希望模态关闭,只是为了在成功提交或出现错误后呈现表单。

在这种情况下:

1。在views/contacts文件夹中创建一个create.js.erb文件create.js.erb

$("#your_modal_id").html("<%= j( render 'form') %>")

2。修改create动作

        def create
          @contact = Contact.new(contact_params)
          respond_to do |format|
            if @contact.save
              flash[:notice] = "Success"
              format.js
            else
              flash[:alert] = "Error"
              format.js
            end       
          end
        end
添加remote: true

警告:这将使您的表单继续填写,即使成功。

关于此主题的更多信息请参见:

http://guides.rubyonrails.org/v4.1.8/working_with_javascript_in_rails.html形式

希望有帮助,我希望我没有忘记任何东西

最新更新