我一直收到这个错误“param丢失或值为空:skyscraper_applications”我不知道为什么

时间:2015-04-19 18:13:36

标签: ruby-on-rails strong-parameters simple-form-for

我的控制员:

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都很好。我是否对强大的障碍做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

错误只是说params[:skyscraper_applications]为空或缺失。

我相信Rails会在这种情况下使用单数形式(通过查看生成的HTML或提交的参数可以轻松确认)所以你应该这样做     params.require(:skyscraper_application).pemit(...)

你的班级名是复数,铁栏不会期待 - 铁轨拐点会从最后剥离“s”。

此外,使用新操作是错误的 - 在没有参数的情况下达到新操作是正常的,因为这是您查看表单的方式。你好像在组合创建和新的动作,除此之外,如果它不是当前的错误,你会得到一个无限的重定向循环:无论保存的结果是什么,你重定向回到新的(这将再次重定向)。

您应该移动代码以实例化并将记录保存到create操作。