동적으로 제어되는 양식 만들기: 백엔드
레시피 만들기
컨트롤러에서 create 메소드를 작성하십시오. 이 생성 방법은 새 레시피를 생성하는 데 사용됩니다.
def create
new_recipe_params = {
title: params[:title],
summary: params[:summary],
user_id: params[:user_id]
}
recipe = Recipe.create(new_recipe_params)
create_ingredients(params[:ingredients], recipe.id)
create_steps(params[:steps], recipe.id)
render json: { recipe: RecipeSerializer.new(recipe)}
end
새 레시피의 매개변수는 다음과 같습니다.
보시다시피 이 메서드는 제목, 요약 및 user_id 데이터를 가져오고 구성 요소 및 단계에 대해 도우미 메서드를 사용합니다. 또한 양식 권한을 처리하는 개인 메서드가 있습니다.
private
def recipe_params
params.require(:recipe).permit(:title, :summary, :user_id, :steps=> [], :ingredients=>[])
end
재료는 프런트 엔드의 양식에서 배열로 저장됩니다. 레시피에 추가하기 위해 create_ingredient 메소드는 해당 배열을 거쳐 이름과 양 정보를 사용하여 각 요소에 대한 재료를 생성합니다. 그런 다음 삽 연산자는 새 재료를 레시피의 재료 속성에 추가합니다.
def create_ingredients(array, id)
recipe = Recipe.find(id)
array.each do |ingredient|
new_ingredient = Ingredient.create({recipe_id: id, name: ingredient[:name], amount: ingredient[:amount]})
recipe.ingredients << new_ingredient
end
end
create_steps 메소드는 유사한 논리를 사용합니다.
def create_steps(array, id)
recipe = Recipe.find(id)
array.each do |step|
new_step = Step.create({recipe_id: id, step_summary: step[:step_summary]})
recipe.steps << new_step
end
end
레시피 표시 중
show 메소드를 사용하면 새로 생성된 레시피를 볼 수 있습니다.
def show
@recipe = Recipe.find(params[:id])
if @recipe
render json: {recipe: @recipe, ingredients: @recipe.ingredients, steps:@recipe.steps }
else
render json: { error: "That recipe does not exist...yet"}, status: :not_acceptable
end
end
이것은 레시피를 만들고 표시하는 데 작동하지만 레시피를 편집하는 것은 어떻습니까?
레시피 편집
편집 경로는 레시피를 찾습니다.
def edit
@recipe = Recipe.find(params[:id])
render json: @recipe
end
create 메소드와 마찬가지로 update 메소드도 재료 및 단계 속성에 대한 도우미 메소드가 필요합니다.
def update
@recipe = Recipe.find(params[:id])
edit_ingredients(params[:ingredients], @recipe.id)
edit_steps(params[:steps], @recipe.id)
@recipe.update(recipe_params)
render json: @recipe
end
edit_ingredients 메소드는 create 메소드와 유사합니다. 먼저 재료를 찾은 다음 업데이트된 재료에 업데이트를 적용합니다. 다시 말하지만, 업데이트된 재료는 레시피에 삽질됩니다.
def edit_ingredients(array, id)
recipe = Recipe.find(id)
if recipe.ingredients
array.each do |ingredient|
if ingredient[:id]
updated_ingredient = Ingredient.update({recipe_id: id, name: ingredient[:name], amount: ingredient[:amount]})
else
updated_ingredient = Ingredient.create({recipe_id: id, name: ingredient[:name], amount: ingredient[:amount]})
recipe.ingredients << updated_ingredient
end
end
end
end
다시, edit_steps 메소드는 edit_ingredients 메소드와 동일한 패턴을 따릅니다.
def edit_steps(array, id)
recipe = Recipe.find(id)
if recipe.steps
array.each do |step|
if step[:id]
updated_step = Step.update({recipe_id: id, step_summary: step[:step_summary]})
else
updated_step = Step.create({recipe_id: id, step_summary: step[:step_summary]})
recipe.steps << updated_step
end
end
end
end
레시피 삭제
그에 비해 파괴 방법은 비교적 간단합니다.
def destroy
@recipe = Recipe.find(params[:id])
if @recipe
@recipe.destroy
render json: {message: "Recipe successfully deleted"}
else
render json: {message: "Failed to destroy recipe"}
end
end
결론
동적으로 제어되는 양식에서 정보를 추가하려면 컨트롤러에서 도우미 메서드를 사용하여 정보를 가져옵니다. edit 메소드는 또한 동적 정보에 대한 도우미 메소드를 사용합니다. 컨트롤러 로직을 구현한 후 새 레시피가 백엔드에 저장됩니다.
Reference
이 문제에 관하여(동적으로 제어되는 양식 만들기: 백엔드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kahawaiikailana/making-a-dynamically-controlled-form-the-backend-1jae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(동적으로 제어되는 양식 만들기: 백엔드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kahawaiikailana/making-a-dynamically-controlled-form-the-backend-1jae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)