my controller:
class SkyscraperApplicationsController < ApplicationController
def new
@skyscraper=SkyscraperApplications.new(skyscraper_params)
if @skyscraper.save
redirect_to "/skyscraper_applications/new", :notice => t("skyscraper_saved")
else
redirect_to "/skyscraper_applications/new", :notice => t("skyscraper_failed")
end
end
private
def skyscraper_params
params.require(:skyscraper_applications).permit(:name, :employee_count, :usecase, :email_admin, :what_you_do)
end
end
我在skyscraper_applications/new.html.erb中的表单:
<form class="form-horizontal">
<%= simple_form_for @skyscraper do |f| %>
<div class="control-group">
<label class="control-label" for="name"><%=t ".company_name"%></label>
<div class="controls">
<div><%= f.input :name, :label=>false %></div>
</div>
</div>
<div class="control-group">
<label class="control-label" for="employees"><%=t ".no_of_employees"%></label>
<div class="controls">
<div><%= f.input :employee_count, :label=>false %></div>
</div>
</div>
<div class="control-group">
<label class="control-label" for="employees"><%=t ".usecase"%></label>
<div class="controls">
<%= f.select :usecase, options_for_select([["Select One", ""], "CAD/Render", "Video Production/Editing", "Music Production", "Game Design", "Email/Web", "Other"])%>
</div>
</div>
<div class="control-group">
<label class="control-label" for="Administrator"><%=t ".admin_email"%></label>
<div class="controls">
<div><%= f.input :email_admin, :label=>false %></div>
</div>
</div>
<div class="control-group">
<label class="control-label" for="Administrator"><%=t ".what_you_do"%></label>
<div class="controls">
<div><%= f.input :what_you_do, :label=>false, :as => :text, :input_html => { :rows => 4 }%></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div class="test-drive-submit"><%= f.button :submit, t(".submit")%></div>
</div>
</div>
</form>
<%end%>
所以我不确定为什么我会收到此错误,因为 :skyscraper_applications 在我的架构中添加所有字段都是正确的。我觉得我的方法和simple_form_for都很好。我对强参数做错了什么吗?提前感谢!
错误只是说params[:skyscraper_applications]
是空的或丢失的。
我相信 Rails 在这种情况下会使用单数形式(通过查看生成的 HTML 或提交的参数很容易确认),所以你应该这样做 params.require(:skyscraper_application).pemit(...)
你的类名是复数的,这是 rails 不会预料到的 - rails 屈折将从末尾剥离"s"。
此外,按原样使用新操作是错误的 - 到达没有参数的新操作是正常的,因为这就是您查看表单的方式。您似乎正在结合创建和新操作,如果不是因为当前错误,您看起来会得到一个无限的重定向循环:无论保存的结果如何,您都会重定向回新的(这将再次重定向)。
应将用于实例化和保存记录的代码移动到创建操作中。