Я создаю веб-приложение с Rails 5.2.0 о рецептах, и у меня есть сомнения по поводу метода create
контроллера.
Это мои модели:
class Recipe < ApplicationRecord
belongs_to :user
has_many :quantities
has_many :ingredients, through: :quantities
accepts_nested_attributes_for :quantities, allow_destroy: true
end
class Quantity < ApplicationRecord
belongs_to :recipe
belongs_to :ingredient
end
class Ingredient < ApplicationRecord
has_many :quantities
has_many :recipes, through: :quantities
end
А вот и вид для создания новых рецептов:
<%= form_for(@recipe) do |f| %>
<%= f.label :name, "Name" %>
<%= f.text_field :name %>
<%= f.label :servings, "Servings" %>
<%= f.number_field :servings %>
<%= f.fields_for :quantities do |quantity| %>
<%= f.hidden_field :_destroy, class: "hidden-field-to-destroy" %>
<%= f.label :ingredient_id, "Ingredient Name" %>
<%= f.text_field :ingredient_id%>
<%= f.label :amount, "Amount" %>
<%= f.number_field :amount %>
<%= f.label :unit, "Unit" %>
<%= f.select(:unit, ["kg","g","l","ml"], {include_blank: true}) %>
<% end %>
<%= f.submit 'Add new recipe' %>
<% end %>
Я могу динамически добавлять новые ингредиенты с помощью jquery, а также удалять их в той же форме.
Метод контроллера update
работает отлично, но метод create
не работает:
class RecipesController < ApplicationController
def create
@recipe = current_user.recipes.build(recipe_params)
if @recipe.save
flash[:success] = "New recipe created correctly."
redirect_to @recipe
else
render 'new'
end
end
def update
@recipe = Recipe.find(params[:id])
if @recipe.update_attributes(recipe_params)
flash[:success] = "The recipe has been updated correctly."
redirect_to @recipe
else
render 'edit'
end
end
private
def recipe_params
params.require(:recipe).permit( :name, :servings, quantities_attributes: [:ingredient_id, :amount, :unit,:_destroy, :id, :recipe_id])
end
end
Я пытаюсь сделать @recipe = current_user.recipes.build(recipe_params)
, но я получаю следующую ошибкув представлении:
- рецепт количества не может быть пустым
Я думаю, что это происходит, потому что при попытке создать отношение необходимочтобы указать recipe_id, но рецепт еще не создан, и идентификатор не может быть указан.
Не могли бы вы сказать мне, кто будет правильным способом для создания рецепта, а затем можно будет добавитьингредиенты через Количество в методе создания контроллера рецептов?