2017-04-10 11 views
0

リダイレクトの代わりにレンダリングすると、結果が表示されるようなフォームがあります。送信時にリダイレクトする代わりにフォームをレンダリングする方法を教えてください。

ですので、フォームをリダイレクトしないでください。これはレールで可能かどうか誰かが知っていますか?

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 
+0

だけ明確にするために、フォームがリロードしたり、新しいページに移動せずに同じページに表示され返されたデータを提出し、持って持って見ていますか? – octopushugs

+0

こんにちは@octopushugs、はい。 – bookaka

答えて

1

レールを有していますこれを処理するための非常に便利な方法:リモートフォーム。ここでの注意点は、Unobtrusive JS(UJS)を使用していない場合、これはうまくいかず、難しい方法でワイヤリングする必要があるということです。

は、formタグの表記法では、Railsの5を使用しているあなたを想定し、このようになります:

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

あなたは、ほとんどのRailsのバージョンでこれを行うことができるはずですが、それは少し違って見えるかもしれません。これが事実上、あなたのフォームをAJAX経由で提出します。 JSイベントリスナーをajax:successまたはajax:errorにバインドし、calculate_shipから取得した応答を処理できます。

フォームの提出を行うときには、方法はデフォルトでPOSTになり、おそらくそれがPUTまたはPATCHである必要があります。ここで

は、レールのための関連ドキュメントです:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#form-tag

+0

ありがとうございます!レール3または4の が異なっていますか? – bookaka

+0

類似するはずです – octopushugs

関連する問題