我有两个部分路由到同一个控制器和相同的模型。在这两个部分中,我提交了一个新表单,我打算在我的控制器中使用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
答案 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'