【问题标题】:Rails how to Render a form instead of redirect on submit?Rails如何在提交时呈现表单而不是重定向?
【发布时间】:2017-04-10 22:15:03
【问题描述】:

我有一个表单,如果呈现而不是重定向,结果只会显示。

因此不得重定向表单。有人知道 Rails 是否可以做到这一点?

形式是:

  Pac: <%= @pac %> 
                   Sedex: <%= @sedex %> 
                 <%= form_tag calculate_ship_path, :method => "get" do %>                          
                  <%= text_field_tag :post_code%>
                 <% end %> 

订单控制器和操作是:

  def calculate_ship
    frete = Correios::Frete::Calculador.new cep_origem: "#{@order.seller.post_code}",
      :peso => "#{@order.product.weight}",
      :comprimento =>  "#{@order.product.weight}",
      :largura =>  "#{@order.product.weight}",
      :altura =>  "#{@order.product.weight}",
      cep_destino: params[:post_code]
    servicos = frete.calcular :sedex, :pac
    @pac = servicos[:pac].valor
    @sedex = servicos[:sedex].valor
    render '/path/to/rails/app//orders/:id/checkout'
  end

路线是:

get  '/path/to/rails/app//orders/:id/checkout', to: 'orders#checkout', as: :calculate_ship

【问题讨论】:

  • 澄清一下,您希望提交表单并将返回的数据显示在同一页面上,而无需重新加载或转到新页面?
  • 你好@octopushugs,是的。

标签: mysql ruby-on-rails forms ruby-on-rails-3


【解决方案1】:

Rails 有一个非常方便的方法来处理这个问题:远程表单。这里需要注意的是,如果您不使用 Unobtrusive JS (UJS),那么这将无法正常工作,您将不得不将其连接起来。

假设您使用的是 Rails 5,在表单标记表示法中它看起来像这样:

<%= form_tag(calculate_ship_path, remote: true, method: "GET") do %>
  <%# form stuff %>
<% end %>

您应该可以使用大多数 Rails 版本执行此操作,但看起来可能会有些不同。这实际上是通过 AJAX 提交您的表单。然后,您将能够将 JS 事件侦听器绑定到 ajax:successajax:error 并处理您从 calculate_ship 获得的响应。

需要注意的是,当您进行表单提交时,该方法默认为POST,并且可能应该是PUTPATCH

这是 rails 的相关文档:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-tag

【讨论】:

  • 它们应该是相似的
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多