Рельсы не сохраняются, параметр отсутствует или пуст

#ruby-on-rails #ruby #database #forms #erb

Вопрос:

Я работаю над отслеживанием проблем в Rails. Я пытаюсь сохранить проблему в форме. Отношения-это проект, у которого много проблем. Я получаю следующую ошибку в браузере:

ActionController::ParameterMissing in IssuesController#create

param is missing or the value is empty: issue

И на сервере на терминале:

Started POST "/issues/new" for ::1 at 2021-07-30 09:42:20 -0400 Processing by IssuesController#create as HTML Parameters: {"authenticity_token"=>"[FILTERED]", "title"=>"Proj3", "summary"=>"Test3", "description"=>"Test3", "status"=>"complete", "commit"=>"Save "} Completed 400 Bad Request in 1ms (Allocations: 833)

Вот форма:

                  <%= form_with model: @issue, :url => new_issue_path do |form| %>
                    <p><%= form.label :New_Issue %></p>
                    <h5>Project Title: </h5>
                    <% titles = [] %>
                    <% Project.all.each do |project| %>
                        <% titles << project.title%>
                    <% end %>
                    <p><%= form.select :title, titles %></p>  

                    <h5>Summary: </h5>
                    <p><%= form.text_area :summary, size: "15x3" %></p>
                    <h5>Description: </h5>
                    <p><%= form.text_area :description, size: "30x5" %></p>
                    <h5>Status: </h5>
                    <p><%= form.text_area :status, size: "10x2" %></p>
                    <%= form.submit %>
                <% end %>
 

Вот часть контроллера:

 def issue_params
    params.require(:issue).permit(:summary, :description, :status)
  end

  def create
    # create issues and attach them to the project found by title
    Project.find_by_title(params[:title]).issues.create!(
                                          summary: params[:summary], 
                                          description: params[:description], 
                                          status: params[:status])
    redirect_to issues_url
  end
 

Заранее спасибо!

Комментарии:

1. URL — адрес неверен в помощнике form_with. Это должно быть отправкой в метод создания, а не в новый метод в контроллере. Вместо new_issue_path это должен быть issues_path. В дополнение к комментарию @Joel Blum ниже о сильных параметрах. Я не понимаю, почему new_issues_path обрабатывается IssueController#create, возможно, в маршрутах есть ошибка. Также получаемые параметры должны иметь формат {проблема: {резюме: «текст», статус: «текст» и т. Д.}}.

Ответ №1:

Вы не используете строгие параметры в своем контроллере

  Project.find_by_title(params[:title]).issues.create!(issue_params)
 
 

Комментарии:

1. Я думаю title , что параметры также должны быть включены в issue_params , так как они также находятся внутри формы

2. Спасибо, Джоэл Блюм, возможно, это и было проблемой, но дело было не в этом. Я все еще получаю ту же ошибку.


Ответ №2:

Похоже, что ваши сильные параметры нарушаются, потому @issue что потенциально равны нулю.

В вашей форме замените <%= form_with model: @issue, :url => new_issue_path do |form| %> на <%= form_with scope: :issue, :url => new_issue_path do |form| %>