Как создать новую форму рельсов при отправке предыдущей формы - PullRequest
0 голосов
/ 31 марта 2020

Я делаю приложение рельсов, которое позволяет пользователю создавать рецепты. На новой странице рецепта есть поля ввода для названия рецепта, автор et c. а затем есть поля ввода для ингредиентов. При создании нового ингредиента страница перенаправляется на страницу «Показать рецепт». Как могла бы страница диммически генерировать новую форму ингредиента ниже старой? на две части, одна для заголовка формы рецепта _form. html .rb и одна с именем _ingform. html .rb, _ingform. html .rb отображается внутри _form. html .rb и _form. html .rb отображается в новом. html .rb и редактируется. html .rb.

_form. html .rb

<link rel="stylesheet" type="text/css" href="app/assets/stylesheets/form.css">

<div id = "form">
  <%= form_for(@recipe) do |form| %>
    <% if @recipe.errors.any? %>
      <div id = "error_explanation">
        <h2>
          <%= pluralize(@recipe.errors.count, "error") %>
          prohibited this recipe from being saved:
        </h2>
        <ul>
          <%@recipe.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
          <% end %>
        </ul>
      </div>
    <% end %>

    <p>
      <%= form.label :title  %><br>
      <%= form.text_field :title %>
    </p>

    <p>
      <%= form.label :author  %><br>
      <%= form.text_field :author %>
    </p>

    <p>
      <%= form.label :note %><br>
      <%= form.text_area :note %>
    </p>

      <%= render 'ingform' %>

      <p>
        <%= form.submit %>
      </p>

  <% end %>
</div>

_ingform. html. рб

<link rel="stylesheet" type="text/css" href="app/assets/stylesheets/ingform.css">
<%= form_for(@recipe) do |form| %>
  <h2>Add an Ingredient: </h2>
  <%= form.fields_for :ingredients do |new| %>
    <p class = "input_field">
      <%= new.label :name, "name" %><br>
      <%= new.text_field :name %>
    </p>
    <p class = "input_field">
      <%= new.label :amount, "amount" %><br>
      <%= new.number_field :amount %>
    </p>
    <p class = "input_field">
      <%= new.label :uom, "UOM" %><br>
      <%= new.text_field :uom %>
    </p>
    <p class = "input_field">
      <%= new.submit %>
    </p> </br>
  <% end %>
<% end  %>

ингредиенты относятся к рецептам. recipe.rb

class Recipe < ApplicationRecord
  has_many :ingredients, :dependent => :delete_all
  accepts_nested_attributes_for :ingredients, reject_if: :all_blank
  validates :title, presence: true, length: {minimum: 4}
  validates :author, presence: true
end

спасибо

1 Ответ

0 голосов
/ 31 марта 2020

Это распространенная проблема - все дело во вложении форм: самый простой вариант - убедиться, что ваш рецепт принимает вложенные атрибуты для ингредиентов. Пожалуйста, посмотрите следующий Railscast : на самом деле это довольно просто реализовать. Единственная загвоздка в том, что форма отправляется сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...