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 %>
我学习了 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 %>