【问题标题】:Rails form not saving, param is missing or emptyRails 表单未保存,参数丢失或为空
【发布时间】:2021-10-06 04:40:26
【问题描述】:

我正在 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

提前致谢!

【问题讨论】:

  • form_with 助手中的 url 错误。它应该发布到 create 方法,而不是控制器中的 new 方法。而不是 new_issue_path,它应该是 issues_path。除了@Joel Blum 下面关于强参数的评论。我不明白为什么 IssueController#create 正在处理 new_issues_path,可能路由中有错误。此外,收到的参数应具有格式 {issue: {summary: "text", status: "text" etc.}}。

标签: ruby-on-rails ruby database forms erb


【解决方案1】:

您没有在控制器中使用强参数

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

【讨论】:

  • 我认为title 参数也应该包含在issue_params 中,因为它也在表单中
  • 谢谢,Joel Blum,这可能是个问题,但不是 问题。我仍然遇到同样的错误。
【解决方案2】:

您的强大参数似乎正在中断,因为 @issue 可能为零。

在您的表单中,将 &lt;%= form_with model: @issue, :url =&gt; new_issue_path do |form| %&gt; 替换为 &lt;%= form_with scope: :issue, :url =&gt; new_issue_path do |form| %&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多