我有一个表单名称(反馈),我正在尝试提交它。
但是,它一直在调用GET HTTP方法。我试过添加:method => :发布form_for参数,但它仍然无法正常工作。我能知道它为什么不调用POST方法吗?
rake routes:
Prefix Verb URI Pattern Controller#Action
feedbacks POST /feedback(.:format) feedbacks#create
new_feedback GET /feedback/new(.:format) feedbacks#new
root GET / welcome#index
FeedbacksController
class FeedbacksController < ApplicationController
def create
@feedback = Feedback.new(feedback_params)
@feedback.save
end
def new
@feedback = Feedback.new
end
private
def feedback_params
# params.require(:feedback).permit(: )
end
end
反馈/ new.html.haml
.container.col-xs-12.col-sm-8.col-sm-offset-2.col-md-8.col-md-offset-2.col-lg-8.col-lg-offset-2
.WhiteSpace
=fa_icon "coffee 2x"
=fa_icon "coffee 2x"
=fa_icon "coffee 2x"
%h4 Help us serve you better by telling us what you think !
.WhiteSpace
%form.form-horizontal
=form_for(@feedback, :method => :post) do |feedback|
.form-group
%feedback.label_field.col-sm-2.control-label <b>Name</b>
.col-sm-6
=feedback.text_field(:name, :class =>"form-control" ,:placeholder => "Name")
.form-group
%feedback.label_field.col-sm-2.control-label <b>Email (optional)</b>
.col-sm-6
=feedback.text_field(:email, :class => "form-control", :placeholder => "Email")
.form-group
%feedback.label_field.col-sm-2.control-label <b>Tel No. (optional)</b>
.col-sm-6
=feedback.text_field(:telephone_no, :class => "form-control", :placeholder =>"Telephone No.")
-#TODO: Use Ratyrate
.form-group
%h3.col-sm-2.control-label!="<u>Services</u>"
.form-group
%feedback.label_field.col-sm-2.control-label <b>Delivery</b> :
.col-sm-6
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
.form-group
%feedback.label_field.col-sm-2.control-label <b>Friendliness</b> :
.col-sm-6
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
.form-group
%feedback.label_field.col-sm-2.control-label <b>Price </b>:
.col-sm-6
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
=fa_icon "star-o 2x"
.form-group
%feedback.label_field.col-sm-2.control-label <b>Message:</b>
.col-sm-6
=feedback.text_area(:comment, :class => "form-control", :placeholder=> "Comment",:rows =>"10")
.form-group
=feedback.submit("Submit", :class =>"btn-primary btn-lg btn-block")
答案 0 :(得分:3)
不要嵌套表格
%form.form-horizontal
=form_for(@feedback, :method => :post) do |feedback|
应该是
=form_for @feedback, :html => {:class => 'form-horizontal'} do |feedback|
默认情况下,表单将使用GET方法提交表单。但是rails form_for
方法默认使用POST。您无需将方法显式设置为POST或将操作设置为create
。
通常,表单partial在new
和edit
中呈现,并将提交给create和update操作,具体取决于对象的状态(在本例中为@feedback)。在更新操作中,form_for方法将提交的方法设置为PUT(或PATCH)。明确将此设置为POST会发生冲突。
答案 1 :(得分:0)
嘿,伙计们尝试了我可以通过堆栈找到的不同解决方案,这对我有用。
HTML <form> tag causing Rails form to submit a GET instead of POST request
在评论中,其中一人解释了原因:
@kcurtin:HTML没有嵌套,所以浏览器只看到表单控件(即外部表单), 默认方法属性是GET,默认操作是当前 URL。