2017-08-31 3 views
1

私は私のインデックスに私を取得するためにうまく動作するリダイレクトを持っています。以下のとおりです。Rails - インデックスに行くだけでなく、同じクリックでフォームを送信する

redirect_to action: :index, filters: { recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" }, hide_filters: true 

これは、クリック時にフィルタを設定しています。同じページには、送信アクションでタグ付けされたボタンがあります。ここ

はHAMLの抜粋である(それはちょっとERBのような具合だ...ただ、それはタイプがどのように注意し、それにあまり心配しないでください:提出)それを含むファイルを:

クリック
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' } 
    %span.glyphicon.glyphicon-play 
    Update List 

上記のボタンをクリックするとフォームが送信され、フィルタが適用され、結果が画面上の表に表示されます。

これはすべてうまくいきましたが、リダイレクト時に送信ボタンを「自動的にクリックする」という新しい要件があります。 AKA、私は手動でこのボタンをクリックする必要はありません...代わりに、リダイレクトの一環として、フォームを提出する必要があります。だから、ページがロードされるとき、私はちょうどボタンをクリックしたように - データが入力されているなどです。これが可能かどうか、あなたが知っていますか?私はredirect_toアクションのドキュメントを掘り下げて、そこに助けを求めることを望んでいた。

UPDATE:それは負荷にフォームを送信し

:javascript 
    document.querySelector('.button.btn.btn-primary.btn-sm').click(); 

を...しかし:そうのようなファイルの末尾にHAMLの上に、

document.querySelector('.button.btn.btn-primary.btn-sm').click(); 

を:

私が追加私のインデックスページは何度も何度も再レンダリングされているはずです...ボタンを繰り返しクリックします。それは一度だけではありません。これを単に負荷に結びつける何らかの方法があるのだろうかと思っていました。

UPDATE 2:

だから私は

firstSubmit = function() { 
    document.querySelector('.button.btn.btn-primary.btn-sm').click(); 
}; 
$(document).on('page:load', firstSubmit); 

を書いた問題がある...私のページが繰り返し自体をリロードされるようです。それで、それは私のボタンを何度もスパムして、ページ全体の流入をもたらします。とにかくこれを本当にjanky(グローバルなvar?私は憎むだろう)を得ることなく制限する?

答えて

2

フォームにフラグ変数を追加すること(フォームのアクションがindexにリダイレクト仮定):次に

= hidden_field_tag :do_not_redirect 
%button.btn.btn-primary.btn-sm{ type: 'submit', style: 'background-color: #a38672;' } 
    %span.glyphicon.glyphicon-play 
    Update List 

javascriptの変更:私は思う

redirect_to action: :index, filters: { 
    recent_price_change: "#{1.week.ago.strftime('%m/%d/%Y')} - #{Date.today.strftime('%m/%d/%Y')}" 
}, hide_filters: true, do_not_redirect: params[:do_not_redirect].presence 
+0

ちょっとそこに - 私はこのコードを単純に入れていないし、これまではサイコロを入れていません。しかし、これがどのように起動しようとしているのか尋ねたがっていますdo_not_redirectがフラグ変数として私のボタンに縛られていると、その人がボタンに当たっていないので(理想的には、ボタンを押すことなくロードしたいのであれば)フォームは決して提出しませんか?私たちがここで何をしようとしているのかをもっとよく理解することができれば、私はそれを一緒に得ることができます/私の状況でそれを働かせる方法を見つけ出すことができます。 – PinkElephantsOnParade

+0

'do_not_redirect'フィールドは、ページが読み込まれてからフォームを送信するときに自動的にjavascriptで設定されます。コントローラーはdo_not_redirect POSTパラメーターの存在をチェックし、GETパラメーターでこのフラグを使用してインデックスにリダイレクトします。 javascriptは表示されず、フラグが表示され、フォームは1回だけ送信されます。 – Inpego

0

- unless params[:do_not_redirect] 
    :javascript 
    $(document).on('page:load', function() { 
     $('#do_not_redirect').val(1); 
     $('.button.btn.btn-primary.btn-sm').click(); 
    }); 

とコントローラをあなたがしたいことは、コールバックを利用することです。使い慣れているかどうかは不明ですが、コールバックは他のアクションが実行された後に実行するルーチンに過ぎません。この場合、送信ボタン(after_saveまたはafter_commitコールバックである可能性が高い)をクリックすると、そのインデックスにリダイレクトします。コールバックは、一般的に、このような場合には、コントローラの先頭に次のようなものを見つけています

class SomeController < ApplicationController 
    after_save :go_to_index 

その後、通常のコントローラのアクション後:

private 
    def go_to_index 
     // Redirect code 
    end 

私は、これはあなたが「何だと思いますあなたがコールバックのAPI情報を見つけることができます:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

ちょっとそこに、私は実際にボタンを押してしたく​​ないです。基本的には、ボタンプレスをエミュレートしたいと思っています。ランディングページに着くとすぐにボタンを「自動」にしたいと思います。 – PinkElephantsOnParade

+0

リンク先ページにつながっていませんか? – DudeMontag

関連する問題