Summit 按钮在 rails form_with 编辑操作中不起作用

Summit button not working in rails form_with edit action

我创建了一个表单来编辑 rails 应用程序中的嵌套资源。表单正确呈现,提交按钮与创建操作的表单一起使用,但在应用于编辑操作时会引起注意。没有错误被触发,页面也没有改变,所以很难找出问题出在哪里。类似的问题似乎是语法错误的结果,但在这种情况下我似乎找不到,但是,我可能遗漏了一些东西。以下是有问题的表格。

<h1>Edit an Ingredient<h1>

    <%= form_with model: [ @recipe, @ingredient ], local: true do |form| %>

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

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

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

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

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

      <% end %>

    <%= link_to 'Back', recipes_path %>

并且功能 "New" 形式...

<h1>Add an Ingredient<h1>

<%= form_with model: [ @recipe, @recipe.ingredients.build ], local: true do |form| %>

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

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

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

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

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

  <% end %>

<%= link_to 'Back', recipes_path %>

最后是相关的控制器...

class IngredientsController < ApplicationController

def new
    @recipe = Recipe.find(params[:recipe_id])
end

def edit
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.find(params[:id])
end

def create
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.create(ingredient_params)
    redirect_to recipe_path(@recipe)
end

def update
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.find(params[:id])
end

def destroy
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.find(params[:id])
    @ingredient.destroy
    redirect_to recipe_path(@recipe)
end


private
    def ingredient_params
        params.require(:ingredient).permit(:quantity, :measurement, :ingredientname, :label)
    end
end

此外,表单在呈现时会正确填充,这让我相信这不是 form_with 语句的问题。感谢您的帮助!

改变<%= form_with model: [ @recipe, @recipe.ingredients.build ], local: true do |form| %>

<%= form_for [ @recipe, @recipe.ingredients.build ] do |form| %>

我找到了解决方案。由于控制器中更新操作的定义不完整,提交按钮不起作用。而不是...

def update
  @recipe = Recipe.find(params[:recipe_id])
  @ingredient = @recipe.ingredients.find(params[:id])
end

更新操作应定义为...

def update
    @recipe = Recipe.find(params[:recipe_id])
    @ingredient = @recipe.ingredients.find(params[:id])

    if @ingredient.update(ingredient_params)
        redirect_to @recipe
    else
        render 'edit'
    end
end