HAML rails form_for不调用POST方法

时间:2016-11-04 21:33:30

标签: ruby-on-rails ruby ruby-on-rails-4 haml form-for

我有一个表单名称(反馈),我正在尝试提交它。

但是,它一直在调用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")

点击提交后的输出如下所示。 enter image description here

2 个答案:

答案 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在newedit中呈现,并将提交给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。

相关问题