从javascript请求重定向到html请求不起作用(Rails)

var*_*tis 5 redirect ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在向控制器操作发送javascript请求,以便在未满足某些条件时尝试重定向到另一个html页面.在查看了几个问题之后,我就提出了这个问题:

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
Run Code Online (Sandbox Code Playgroud)

我想重定向到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)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它甚至没有尝试重定向到authentications_url.然而,我知道"其他"声明已经达成(我已经把put语句帮助我找到了).

有没有解决方法呢?

更新 如果您尝试DanS的解决方案,则会出现MissingTemplateError.它仍在尝试重定向到项目#update:

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"
):    
Run Code Online (Sandbox Code Playgroud)

jdo*_*doe 12

我猜你是twittertweet通过ajax来打电话的.然后通过javasctipt代码回复它:

format.js { render :js => "window.location.href = '#{some_path}'" }
Run Code Online (Sandbox Code Playgroud)