Модальная форма не отображается при клике - PullRequest
0 голосов
/ 07 октября 2019

Цель

В настоящее время я пытаюсь создать новый магазин с помощью модальных.

Проблемы

  • Я столкнулся с проблемой, из-за которой мой модал, содержащий форму, не появляется, когда я нажимаю кнопку. ~ Достигнут файл new.js.erb, так как я могу отобразить флэш-сообщение (вместо формы). ~
  • Другая проблема заключается в том, что в настоящее время я использую <%= simple_form_for (Store.new) do |f|%> вместо <%= simple_form_for (@store) do |f|%>. Когда я использую последнее, я получаю сообщение об ошибке: undefined method `model_name' for nil:NilClass
  • Обновление После реализации решения Чандры (см. Ответ ниже), мой тег загорается в моем браузере, когда я нажимаю кнопку,поэтому я также прикрепил файл views / layouts / application.html.erb.

Код

views / stores / index.html.erb

<%= render "partials/show_panel_stores_overview"%>

views / partials / show_panel_stores_overview.html.erb

<%= link_to 'New store', new_store_path, remote: true %>

views / stores / new.js.erb

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

views / stores / _form

<%= simple_form_for (Store.new) do |f|%>
<%= f.input :name %>
<%= f.button :submit%>

контроллер магазина

def new
    @store = current_user.store.build
    @store.age_tables.build
    respond_to do |format|
      format.html { redirect_to root_url, alert: 'Page not accessible' }
      format.js
    end
    authorize @store

  end

  def create
    @store = current_user.stores.create(store_params)
    authorize @store
    if @store.save
      redirect_to stores_path
    else
      render 'new'
    end
  end

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>

1 Ответ

1 голос
/ 07 октября 2019

Вышеприведенный код кажется правильным

есть одно исправление, которое нужно сделать в

views / stores / new.js.erb

var form = $('<%= j(render 'form') %>');

Заменитьэто с

var form = $("<%= j(render 'form') %>");

Перейдите по этой ссылке для примера кода для рендеринга партиалов, Ajax

https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy

...