未定义的方法`model_name'对于nil:NilClass在简单形式中有两个部分

时间:2016-05-19 15:55:22

标签: ruby-on-rails ruby

我有两个部分路由到同一个控制器和相同的模型。在这两个部分中,我提交了一个新表单,我打算在我的控制器中使用create方法。我的第一部分简称为_form.html.haml,效果很好。然而,我的第二个部分我打电话给_case_study_form.html.haml。我的第二个部分是我遇到一些问题。我得到的问题是undefined method 'model_name' for nil:NilClass。我相信我得到了这个问题,因为我的第二个部分有一个不同的名字,我不明白为什么我得到这个错误,因为我觉得我已经正确地路由了模型。

我的模型名为form_submission.rb

我的第一部分,_form.html.haml我的第一行设置为

= simple_form_for @form_submission do |f|

我的第二部分,_case_study_form.html.haml我的第一行遇到麻烦并将其设置为

= simple_form_for @form_submission, url: case_study_path do |f|

我的控制器是

class FormSubmissionsController < ApplicationController
  invisible_captcha only: [:create, :case_study], on_spam: :handle_spam

  def new
    @form_submission ||= FormSubmission.new
  end

  def create
    @form_submission = FormSubmission.new(form_submission_params)

    if @form_submission.save
      redirect_to thank_you_path
    else
      render :new
    end
  end

  def case_study
  end

  private

    def handle_spam
      redirect_to root_path
    end

    # Only allow a trusted parameter "white list" through.
    def form_submission_params
      params.require(:form_submission).permit(:first_name, :last_name, :organization, :email, :phone, :recognition, :inquiry, :form_submission)
    end
end

1 个答案:

答案 0 :(得分:1)

您还需要在方法@form_submission内初始化case_study个对象。您在表单中提到的url表示表单提交操作控制器方法。即,一旦您提交表单,它将转到该URL。

def case_study
  @form_submission ||= FormSubmission.new
end