ActionController :: ParameterMissing(param丢失或值为空:)

时间:2016-03-14 13:07:08

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.2

我研究了Michael Hartl的rails教程,我想为这个应用程序添加新服务。

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

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

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

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

的观点\时间表\ 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 %>

3 个答案:

答案 0 :(得分:1)

问题是您手动渲染表单输入字段。输入字段必须具有正确生成的参数的特定名称。在您的情况下,您需要以下内容:

<%= f.text_field :title %>

有关详细信息,请查看form helpers documentation

答案 1 :(得分:1)

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

<%= f.text_field :title %>

答案 2 :(得分:0)

您的参数中可能缺少“计划”,或者它是空的。我可以看到你正在使用直接html

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

而是使用rails方式使用表单构建器对象,例如

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

或者如果您仍然想使用直接html,请改用

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

希望这有帮助