2016-08-04 10 views
0

ユーザーがフォームを送信すると「新しい」ビューでメッセージをフラッシュする必要がありますが、コントローラーが「表示」ビューにリダイレクトされる前にが点滅します。Railsはリダイレクト前の現在の表示でフラッシュ通知を返します

フォームの送信時にcreateメソッドから.shスクリプトを実行します。スクリプトの実行には数分かかります。フォームは「新しい」ビューの内側に配置されます。フォームなどはすべて、標準的な規則を使用して足場を張っていました。

.shスクリプトが実行されてコントローラがリダイレクトされる前に、「新しい」ビューでメッセージをフラッシュするにはどうすればよいですか?

new.html.erb:

<p id="notice"><%= notice %></p> 
<h1>New Job</h1> 
<%= render 'form' %> 

jobs_controller:Railsはクライアント(ブラウザ)に応答を送信したときにのみ起こるので、フラッシュメッセージは起きていない

def create 
    @job = Job.new(job_params) 

    flash[:notice] = 'Job Started' #added notice here but it doesn't flash in the "new" view 

    respond_to do |format| 
     if @job.save 
     format.html { redirect_to @job, notice: 'Job finished' } 
     format.json { render :show, status: :created, location: @job } 
     else 
     format.html { render :new } 
     format.json { render json: @job.errors, status: :unprocessable_entity } 
     end 
    end 

    job_call = 'sh testScript.sh' #var for a test sh file to run 
    system(job_call) #add sh script here 

    end 
+0

私はちょうどそれはいくつかのJSをアップ装備だが、より優れたレールソリューションがある場合は疑問に思っ... – HoosierCoder

答えて

1

これは明らかに問題の回避策です。しかし、私はdiv要素を非表示解除または単にフォーム上の通知メッセージとJS警告を点滅して、それを達成提出:

<%= f.submit 'Run Job', :onclick => "return showNotice()"%> 
+0

私に完全に良いソリューションのように見えます! – Andy

1

ブラウザはテンプレートをレンダリングします。

createメソッドのすべての処理が完了すると、応答は返されます。これがあなたの問題の要です。

ブロッカーは、2番目のレンダリングやリダイレクトを含む別のメソッドを不正行為させて呼び出しようとする場合でも、1つのリダイレクトまたはレンダリングをコントローラーごとに行うことしかできません。 AbstractController::DoubleRenderErrorが得られます。

私はこのような方法があるとは思わないし、Rails AJAXで達成することさえできないと思います。あなたのJavascriptソリューションが唯一の方法であるように見えます。なぜソリューションを投稿しないのですか?

+0

ええ、あなたは正しいです。私は通知でレンダリングの回避策があることを望んでいた:( – HoosierCoder

関連する問題