没有路由匹配两个简单形式部分中的[POST]

时间:2016-05-19 17:34:06

标签: ruby-on-rails ruby

我有两个部分路由到同一个控制器和相同的模型。在这两个部分中,我提交了一个新表单,我打算在我的控制器中使用create方法。

我的第一个部分只是标题为_form.html.haml。 我的第二部分是我遇到问题的地方。这部分称为_case_study_form.html.haml

这两种形式都有相同的信息,但我遇到的问题是,在我的第二部分,当我点击提交时,我结束了No route matches [POST] "/case_study"但问题是我真正拥有是因为我不确切地知道我在路线中错过了什么。如果有人能快速浏览一下,我会非常感激!

当我输入rake routes时,我得到了

    form_submissions GET    /form_submissions(.:format)          form_submissions#index
                     POST   /form_submissions(.:format)          form_submissions#create
 new_form_submission GET    /form_submissions/new(.:format)      form_submissions#new
edit_form_submission GET    /form_submissions/:id/edit(.:format) form_submissions#edit
     form_submission GET    /form_submissions/:id(.:format)      form_submissions#show
                     PATCH  /form_submissions/:id(.:format)      form_submissions#update
                     PUT    /form_submissions/:id(.:format)      form_submissions#update
                     DELETE /form_submissions/:id(.:format)      form_submissions#destroy
             contact GET    /contact(.:format)                   form_submissions#new
          case_study GET    /case_study(.:format)                form_submissions#case_study

我的routes.rb文件看起来像

Rails.application.routes.draw do

  resources :form_submissions
  root 'home#index'
  get '/contact' => 'form_submissions#new'
  get '/case_study' => 'form_submissions#case_study'

在我的两个部分中,我的代码与大多数样式差异非常相似,但是。

我的_form.html.haml

= simple_form_for @form_submission do |f|
(lots of code here in the body)
= f.submit 'Submit', class: "btn btn-default"

我的第二部分,_case_study_form.html.haml

= simple_form_for @form_submission, url: case_study_path do |f|
(lots of code here in the body with different styling)
= f.submit 'Submit', class: "btn btn-default"

我的控制器看起来像

class FormSubmissionsController < ApplicationController
  invisible_captcha only: [:create], 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
    @form_submission ||= FormSubmission.new

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

  private

  def handle_spam
    redirect_to root_path
  end

  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)

我不确定你在这里想要完成什么,但我至少可以回答这个问题。您的表单正在尝试POST到您提供的网址case_study_path,但在您的routes.rb中,您将此指定为GET路由。因此,找不到路线。

要找到路线,您需要在routes.rb中定义。

也就是说,您似乎打算使用与常规表单相同的保存处理程序;在这种情况下,您不需要覆盖表单本身的URL,只需让它使用它本来会使用的create方法。但是,如果你不这样做,那么你需要在routes.rb中将其定义为POST路线,即

post '/case_study/create' => 'form_submissions#create', as: 'submit_case_study'