私は様々なタブを持つページを持っています。 1つのタブの下に、jsonファイルをアップロードする機能があります。このアップロードはフォームタグを使用して行われます。ポストコール中にレンダリングされたタブ間を移動するのを防ぐ
tab4.html.erb:formタグの提出に
<%= form_tag({action: :add}, multipart: true, id: 'myform') do %>
<%= file_field_tag 'json_file' %>
<% end %>
<button id="upload-button">UPLOAD</button>
、私はroutes.rbを資源とjQueryを介してコントローラ内の関数を呼び出します。
routes.rbを:
resources :controller do
collection do
post 'add'
end
end
jQueryのフォームを送信:
$('#upload-button').on('click', function() {
if ($('#json_file').val()) {
$('#myform').submit();
}
});
controller.rb:
def add
file = params[:json_file]
file_content = file.read
json_content = JSON.parse(file_content, symbolize_names: true)
begin
// post call
redirect_to :some_other_page
rescue
// post call fails with exception
redirect_to // same page with a param to show failure
end
end
この関数は、ポストに本体にJSONファイルの内容を送信します別のサービス。
このポストコールが行われているとき、私はユーザーがRuby on Railsアプリケーションで利用できる他のタブを切り替えるのを防止したいのですか?これを達成する方法はありますか?
フォームの送信でajaxコールを使用し、スピナーでオーバーレイを表示してからコントローラのadd
関数を呼び出し、完了するまでユーザーがどこからでもクリックしないようにすることを考えました。
これを達成するためのより良い解決策がありますか?
ポストコールが発生した後にページが再読み込みされますか? – chumakoff
はい、そうです。成功した投稿の場合は、別のタブにリダイレクトされます。エラーが発生した場合、同じタブにエラーメッセージが表示されます – leoOrion
ユーザーがあなたの '$( '#upload-button')をクリックしないようにすることができますon( 'click'、function(){...}'コールバック。ページがリロードされると、制限が自動的に消えます。 – chumakoff