5

Wysyłam żądanie javascript do akcji kontrolera, aby spróbować przekierować na inną stronę html, jeśli pewne warunki nie są spełnione. Po przejrzeniu kilku pytań, to właśnie wymyśliłem:Przekierowanie do html z żądania javascript nie działa (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 

Chcę przekierować na adres authentications_url. Jednak to, co się dzieje:

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) 

Jak widać, to po prostu nawet nie próbując redirect_to się authentications_url. Wiem jednak, że dochodzi do "innego" stwierdzenia (dodałem wyciągi, by pomóc mi to odkryć).

Jakiekolwiek obejścia tego problemu?

Aktualizacja Jeśli spróbujesz rozwiązania DanS, wystąpi błąd MissingTemplateError. To wciąż próbuje przekierować do pozycji # aktualizacji:

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

Czy potrzebujesz render (: update)? 'format.js {redirect_to authentications_url}' – DanS

+0

@DanS Jeśli to zrobię, to mówi "Rozpoczęto GET"/authentications "dla 127.0.0.1 na 2012-04-11 13:57:03 -0400 Przetwarzanie przez uwierzytelnianieController # indeks jako */* "itp. ... ale tak naprawdę nie ładuje strony – varatis

+0

@DanS Innymi słowy mówi, że wyrenderował" authentications/index.html.erb ", ale tak naprawdę nic nie robi – varatis

Odpowiedz

12

Chyba nazywają twittertweet poprzez AJAX. Następnie odpowiedz na to za pomocą kodu javasctipt:

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

Ah, dziękuję za to – varatis

+0

Dziękuję Ci. ta odpowiedź mi pomogła –

Powiązane problemy