Кнопка саммита не работает в рельсах - PullRequest
0 голосов
/ 10 сентября 2018

Я создал форму для редактирования вложенного ресурса в приложении 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 %>

И функционирующая "Новая" форма ...

<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. Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Мне удалось выработать решение. Кнопка отправки не работала из-за неполного определения действия обновления в контроллере. Вместо ...

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
0 голосов
/ 10 сентября 2018

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

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

...