我一直在尝试允许用户输入活动的名称,然后将其保存到数据库中。但是,我遇到了多个问题
第一个是以下内容:
ActionController :: ParametersMissing在ActivitiesController #create
中
及其引用的行如下:
params.require(:活动).permit(:a_name)
我已经找到了一些解决方案,根据我的理解,它源于"要求(:活动)"该行的一部分。我不明白的是为什么让那条特定的行导致错误。
删除" .remove(:activities)"将修复它,但我遇到另一个问题,当我输入一个名称,然后单击"创建"按钮,它认为我没有名称并抛出验证错误。
验证失败:名称不能为空,名称太短(最小 是1个字符)
及其引用的行:
if @ activities.save!
这让我相信我的代码是" form_for"是不正确的,并没有将文本字段中的内容视为名称的输入。我对HTML和Ruby on Rails仍然很陌生,所以任何人都可以看到我做错了什么?谢谢!
活动模型:
class Activity < ApplicationRecord
validates :a_name, presence: true, length: {minimum: 1}
end
活动控制器:
class ActivitiesController < ApplicationController
def display
@activities = Activity.all
end
def index
@activities = Activity.all
end
def show
end
def new
@activities = Activity.new
end
def create
@activities = Activity.create(activities_params)
if @activities.save!
flash[:success] = 'Activity created successfully!'
redirect_to activities_display_path
else
flash[:error] = 'ERROR: Activity was not saved!'
#render_to_string #normally would have it render to the name of view ex: :new
end
end
def edit
@activities = Activity.find(params[:id])
end
def update
@activities = Activity.update(activities_params)
if @activities.save!
flash[:success] = 'Activity successfully updated!'
redirect_to root
else
flash[:error] = 'ERROR: Activity failed to update'
render_to_string
end
end
private
def activities_params
params.require(:activities).permit(:a_name)
end
end
活动新HTML:
<body>
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= form_for @activities do |a| %>
<div class = "form-group">
<div class = "row top-buffer text-center">
<div class='col-md-3'>
<%= a.label :a_name, 'Activity Name' %>:
<%= a.text_field :a_name %>
</div>
</div>
<div class ="row top-buffer text-center">
<div class="col-md-3">
<%= a.submit 'Create', class: 'btn btn-primary'%>
</div>
</div>
</div>
<% end %>
</body>
答案 0 :(得分:0)
正如Max评论的那样,我的错误是认为参数是&#34;活动[a_name]&#34;而不是&#34;活动[a_name]&#34;。
更改
params.require(:activities).permit(:a_name)
到
params.require(:activity).permit(:a_name)
修复了第一个错误,随后允许我保存用户输入。感谢Max的帮助