0

我有一个名为“refund.html.erb”的表单页面

让用户填写表格然后发送。

在我的路线中

  get 'refund' => 'orders#refund'
  post 'refund' => 'orders#refund'

在我的控制器中

  def refund
      apply_refund_to_gdocs
    respond_to  do |format|
      format.html{}
    end
  end

助手中定义的apply_refund_to_gdocs,但是现在当我加载表单页面时,它将调用apply_refund_to_gdocs。但我只想在用户发送表单时调用 apply_refund_to_gdocs。任何想法?

4

1 回答 1

1

好吧,最好的方法是将此方法一分为二,因为它适用于两种不同的事物。我会去:

get 'refund' => 'orders#refund', as: :refund
post 'refund' => 'orders#do_refund', as: :do_refund

然后在你拥有的控制器中

def refund
  # your original 'GET' stuff
  render 'refund'
end

def do_refund
  # your post stuff
  # render 'refund' or redirect 
end

请注意,如果您渲染视图do_refund而不是重定向到refund_path浏览器窗口中的刷新,则会再次触发发布操作。因此,最好仅在您希望用户纠正表单错误时才呈现,否则重定向。

但是,如果您想使用单一方法,您可以在控制器中检查请求。就像是:

def refund
  if request.post?
    #do post stuff
  else
    # do get stuff
  end
end
于 2013-09-22T06:12:20.237 回答