Ruby on rails 如何从操作中发布到表单

Ruby on rails 如何从操作中发布到表单,ruby-on-rails,Ruby On Rails,我有一个指向某个操作的链接,因此如果有人单击: localhost/cart/checkout?pid=123 它转到CartController签出操作,然后显示一个表单 但是在某些情况下(取决于我何时加载id为123的产品),我可能不需要显示表单,我可以只加载数据,然后发布到表单的操作 如何以编程方式将数据发布到表单要发布的位置 class CartController < ApplicationController def checkout pid = params[:

我有一个指向某个操作的链接,因此如果有人单击:

localhost/cart/checkout?pid=123
它转到CartController签出操作,然后显示一个表单

但是在某些情况下(取决于我何时加载id为123的产品),我可能不需要显示表单,我可以只加载数据,然后发布到表单的操作

如何以编程方式将数据发布到表单要发布的位置

class CartController < ApplicationController
  def checkout
    pid = params[:pid]
    product = Product.find(pid)
    if product....
       # no need to display view, just post to handleCheckout
    end
  end

  # checkout form posts to this action
  def handleCheckout
  end
end
class-CartController
我以前没有做过类似的事情,但我有一些想法,所以请注意,没有一个是经过测试的

如果您的
handleCheckout
操作打算用作
Get
请求,则可以使用参数重定向到此操作。比如:

class CartController < ApplicationController
  def checkout
    pid = params[:pid]
    product = Product.find(pid)
    if product....
       redirect_to action: "handleCheckout", params: params
       # Not sure whether you will get it as 'params' or params[:params] in handleCheckout action
    end
  end

  # checkout form posts to this action
  def handleCheckout
  end
end

正如我提到的,我没有尝试过上面的任何代码。可能有错误。我希望它能有所帮助。

我不是ruby开发人员,所以如果我弄错了,请原谅,但您不能发送这样的请求:它看起来像是使用
Net::HTTP
将原始数据直接发布到URL。页面上的第二个解决方案似乎将响应返回为
body
——这两个解决方案都没有页面输出(只有服务器到服务器的调用),您可以查看一下。这应该可以解决你的问题。@bananaappletw这怎么解决呢?@Blankman
GET/cart/:id=>“show data”
GET/cart/new=>“show form”“create data”@bananaappletw对不起,我想你还没有理解这个问题。
def checkout
    pid = params[:pid]
    product = Product.find(pid)
    if product....
       handleCheckout
       # params since is a global hash and above method has access to it
    end
end

# checkout form posts to this action
def handleCheckout
   # your other code
   redirect_to 'some_action' and return
   # in above line you have to return with a render or redirect
   # Otherwise it will render 'checkout' template with render and redirect or
   # it will throw double render error if you have a simple render or redirect without explicit return
end