我研究了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 %>
答案 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]">
希望这有帮助