2016-08-21 13 views
0

htmlとjsの呼び出しで別のものをレンダリングしようとしています。私はjsonの結果をajax呼び出しで処理します。レールとajaxの呼び出しでダブルレンダリングエラーが発生する

私は、レンダリングと再ダイレクトを同時に使用することはできないと言って、二重レンダリングエラーが発生し続けました。しかし、彼らは別の呼び出しのためですので、それは問題ではありませんか?

回答を検索しようとしましたが見つかりませんでした。

ありがとうございました。以下は

私のコードです:

def create 
    service = ServiceCall.new.call 
    if this 
    if abc 
     set_flash('success') 
    else 
     set_flash('notice') 
    end 

    respond_to do |format| 
     format.html { redirect_to(log_in_path) && return} 
    end 
    elsif that 
    respond_to do |format| 
     format.html { redirect_to(root_path) && return} 
    end 
    end 

    respond_to do |format| 
    format.js { render json: service, status: :ok } 
    end 
end 

答えて

1

たぶんreturnあなたが期待するように動作していないし、あなたのブロックが現在のメソッド内で実行されていません。これは、チェーンの深い部分のパラメータとして使用されます。だからあなたは現在の方法を離れることはありません。可能な解決策の1つ:

def create 
    service = ServiceCall.new.call 
    redirect_path = if this 
     if abc 
      set_flash('success') 
     else 
      set_flash('notice') 
     end 

     log_in_path 

     elsif that 
     root_path 
     end 

    respond_to do |format| 
    format.html { redirect_to(redirect_path) } 
    format.js { render json: service, status: :ok } 
    end 
end 
+0

これは機能します。まだ返品がうまくいかない理由をまだ理解していません。 – LOCKLOCK

+0

私は私のawnserを修飾しました。多分返品は問題ではない。 formatが 'js'のときは' respond_to'を何度も呼び出します。私の最初の考えは、ブロックが保存されており、ただちに実行されないということでした。 – slowjack2k

関連する問題