I am making a rails application that allows user to create recipes. On the new recipe page there are input fields for the recipe title, author etc. and then there are input fields for the ingredients. When a new ingredient is created the page redirects to the "Show recipe" page. How could have the page dymnamically generate a new ingredient form below the old one.
ingredients_controller.rb
class IngredientsController < ApplicationController
  def create
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.create(ingredient_params)
    redirect_to new_recipe_path(@recipe)
  end
  private
  def ingredient_params
    params.require(:ingredient).permit(:name, :amount, :uom)
  end
end
recipes_controller.rb
class RecipesController < ApplicationController
  def index
    @recipes = Recipe.all
  end
  def show
    @recipe = Recipe.find(params[:id])
  end
  def new
    @recipe = Recipe.new
    @recipe.ingredients.build
  end
  def edit
    @recipe = Recipe.find(params[:id])
    @recipe.ingredients.build
  end
  def create
    @recipe = Recipe.new(recipe_params)
    if @recipe.save
      redirect_to @recipe
    else
      render 'new'
    end
  end
  def update
    @recipe = Recipe.find(params[:id])
    if @recipe.update(recipe_params)
      redirect_to @recipe
    else
      render 'edit'
    end
  end
  def destroy
    @recipe = Recipe.find(params[:id])
    @recipe.destroy
    redirect_to @recipe
  end
  private
  def recipe_params
    params.require(:recipe).permit(:title, :author, :note,
                                   ingredients_attributes: [:id, :name, :amount, :uom])
  end
end
My form is split into two partials, one for the recipe form title _form.html.rb and one called _ingform.html.rb, _ingform.html.rb is rendered inside _form.html.rb and _form.html.rb is rendered in new.html.rb and edit.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.rb
<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  %>
ingredients belong to recipes. 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
thank you
 
    