5

我發送一個JavaScript請求到控制器動作,如果某些條件不符合,嘗試重定向到另一個html頁面。通過幾個問題後,這是我想出了:重定向到html請求不工作(Rails)

def twittertweet 
    if current_user && current_user.twitter_token 
    .... 
    else 
    flash[:notice] = "You must be registered with Twitter to do that." 
    respond_to do |format| 
     format.js { render(:update) { |page| page.redirect_to authentications_url } } 
    end 
    end 
end 

我想redirect_to的authentications_url。然而,這是會發生什麼:

Started POST "/twittertweet.json" for 127.0.0.1 at 2012-04-11 13:38:27 -0400 
    Processing by ItemsController#twittertweet as */* 
    Parameters: {"id"=>"22"} 
    Category Load (0.3ms) SELECT "categories".* FROM "categories" 
Rendered items/update.html.erb within layouts/application (0.0ms) 
Completed 200 OK in 112ms (Views: 79.9ms | ActiveRecord: 5.7ms) 

正如你所看到的,它甚至沒有嘗試redirect_to authentications_url。然而,我知道「其他」聲明已經達到了(我已經提出了聲明來幫助我找到答案)。

對此的任何解決方法?

更新 如果您嘗試使用DanS的解決方案,則會出現MissingTemplateError錯誤。它仍試圖重定向到項目#更新:

ActionView::MissingTemplate (Missing template items/update, application/update with {:handlers=>[:erb, :builder, :coffee], :formats=>[:json], :locale=>[:en, :en]}. Searched in: 
    * "/Users/dylandrop/Documents/givespend/app/views" 
    * "/Users/dylandrop/.rvm/gems/ruby-1.9.2-p290/gems/devise-2.0.4/app/views" 
):  
+0

您是否需要render(:update)? 'format.js {redirect_to authentications_url}' – DanS 2012-04-11 17:56:09

+0

@DanS如果我這樣做,它會在2012-04-11 13:57:03 -0400上顯示127.0.0.1的「開始GET」/身份驗證「 AuthenticationsController處理#index as */*「等等,但實際上並沒有加載頁面 – varatis 2012-04-11 17:57:56

+0

@DanS換言之,它表示它已經呈現」authentications/index.html.erb「,但實際上並沒有做任何事情 – varatis 2012-04-11 17:58:39

回答

12

我猜你通過AJAX調用twittertweet。然後通過javasctipt代碼回覆它:

format.js { render :js => "window.location.href = '#{some_path}'" } 
+0

啊,謝謝你的這個 – varatis 2012-04-11 20:22:41

+0

謝謝。這個答案幫助了我 – 2014-10-21 07:02:00