ActionController::ParameterMissing(参数缺失或值为空:)

ActionController::ParameterMissing (param is missing or the value is empty:)

我学习了 Michael Hartl 的 rails 教程,我想向此应用添加新服务。

虽然我创建了新的模型、控制器和视图,但是当我在_schedule_form.html.erb中提交f.submit "Create my schedule"时出现了以下错误。

我猜这个错误可能是强参数引起的。

如果您能给我任何建议,我们将不胜感激。

development.log

ActionController::ParameterMissing (param is missing or the value is empty: schedule):
  app/controllers/schedules_controller.rb:30:in `schedule_params'
  app/controllers/schedules_controller.rb:9:in `create'

schedule_controller.rb

class SchedulesController < ApplicationController
  before_action :logged_in_user, only: [:create, :destroy]

  def new
    @schedule = Schedule.new
  end

  def create
    @schedule = current_user.schedules.build(schedule_params)
    if @schedule.save
      flash[:success] = "schedule created!"
      redirect_to root_url
    else
      render 'new'
    end
  end

...

  private

    def schedule_params
      params.require(:schedule).permit(:title)
    end

end

views\schedules\new.html.erb

<div class="row">
  <div class="col-md-12">
    <p>Create schedule (<%= current_user.name %>)</p>
    <%= render "schedule_form" %>
  </div>
</div>

views\schedules\_schedule_form.html.erb

<%= form_for(@schedule) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="input-group">
    <span class="input-group-addon">Title</span>
    <input type="text" class="form-control">
  </div>
  <br>
  <%= f.submit "Create my schedule", class: "btn btn-primary" %>
  <br>
<% end %>

您的参数中可能缺少 "schedule" 或者它是空的。如我所见,您正在使用直接 html

     <input type="text" class="form-control">

而是使用 rails 使用表单生成器对象的方式,例如

    f.input :title, class: 'form-control'

或者如果您仍想直接使用 html,请改用此方法

   <input type="text" class="form-control" name="schedule[title]">

希望对您有所帮助

问题是您手动呈现表单输入字段。输入字段必须具有特定名称才能正确生成参数。在你的情况下,你需要这样的东西:

<%= f.text_field :title %>

查看 form helpers documentation 了解更多详情。

您没有使用 Rails 辅助方法构建表单,因此它没有正确命名您的输入。使用文本字段助手:

<%= f.text_field :title %>