Javascript 如果引发验证错误,如何在rails中保持模式打开

Javascript 如果引发验证错误,如何在rails中保持模式打开,javascript,jquery,ruby-on-rails,bootstrap-modal,Javascript,Jquery,Ruby On Rails,Bootstrap Modal,我有点困惑,如果引导模式(表单)引发表单验证错误,如何重新呈现它 目标 我目前正试图通过一个模式创建一个新的商店 问题 我遇到了一个问题,当我单击按钮时,包含表单的模式没有显示出来~到达了新的.js.erb文件,因为我能够呈现一条flash消息(而不是表单)~ 当我单击按钮时,我的标记在浏览器中亮起,并呈现new.js.erb和表单partial。因此,我还将视图/layouts/application.html.erb文件和控制台日志与渲染文件一起附加在一起 按下“新建”按钮时呈现的文件的

我有点困惑,如果引导模式(表单)引发表单验证错误,如何重新呈现它

目标

我目前正试图通过一个模式创建一个新的商店

问题

  • 我遇到了一个问题,当我单击按钮时,包含表单的模式没有显示出来~到达了新的.js.erb文件,因为我能够呈现一条flash消息(而不是表单)~

  • 当我单击按钮时,我的标记在浏览器中亮起,并呈现new.js.erb和表单partial。因此,我还将视图/layouts/application.html.erb文件和控制台日志与渲染文件一起附加在一起

按下“新建”按钮时呈现的文件的控制台日志:

Rendering stores/new.js.erb
  Rendered stores/_age_table_fields.html.erb (5.8ms)
  Rendered stores/_age_table_fields.html.erb (6.0ms)
  Rendered stores/_form.html.erb (32.0ms)
  Rendered stores/new.js.erb (34.8ms)
Completed 200 OK in 58ms (Views: 47.2ms | ActiveRecord: 0.8ms)
代码

视图/存储/index.html.erb

<%= render "partials/show_panel_stores_overview"%>
views/layouts.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>TODO</title>
    <%= csrf_meta_tags %>
    <%= action_cable_meta_tag %>
    <%= stylesheet_link_tag 'application', media: 'all' %>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

    <%= stylesheet_pack_tag 'application', media: 'all' %> <!-- Uncomment if you import CSS in app/javascript/packs/application.js -->
  </head>
  <body>
    <%= yield %>
    <%= render 'shared/flashes' %>

    <%= javascript_include_tag 'application' %>
    <%= javascript_pack_tag 'application' %>

  </body>
</html>

待办事项

在“索引”页面上呈现表单时,需要在控制器的“索引”操作中分配
@store
变量

class StoresController < ApplicationController
  def index
    @store = current_user.stores.build
    # ...
  end
end
“new.js.erb”脚本应适用于以下两种情况:

  • 呈现新表单(“新建”操作)
  • 当表单无效时重新呈现表单(“创建”操作)
  • 视图/商店/new.js.erb

    var form = $("<%= j(render 'form') %>");
    var wrapper = $('<div>').attr('id', 'new-store-form').append(form);
    $('body').append(wrapper);
    
    $("#new-store-form").html("<%= j(render 'form') %>");
    

    谢谢你的帮助。索引操作是
    def index@user=current\u user@stores=current\u user.stores end
    ?你在那里添加了@store吗?更正了它,并在索引操作中添加了一个
    @store
    @store
    现在确实可以在表单中使用,只剩下重新渲染模式问题需要解决..您有'new.js.erb'文件吗?
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>TODO</title>
        <%= csrf_meta_tags %>
        <%= action_cable_meta_tag %>
        <%= stylesheet_link_tag 'application', media: 'all' %>
    
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
        <%= stylesheet_pack_tag 'application', media: 'all' %> <!-- Uncomment if you import CSS in app/javascript/packs/application.js -->
      </head>
      <body>
        <%= yield %>
        <%= render 'shared/flashes' %>
    
        <%= javascript_include_tag 'application' %>
        <%= javascript_pack_tag 'application' %>
    
      </body>
    </html>
    
    class StoresController < ApplicationController
      def index
        @store = current_user.stores.build
        # ...
      end
    end
    
    <div id="new-store-form"></div>
    
    $("#new-store-form").html("<%= j(render 'form') %>");
    
      $("#modal_id").modal('show');