在Rails中的PUT(状态:303)之后重定向到GET不起作用

时间:2017-10-16 20:27:56

标签: ruby-on-rails

在Rails 5.1中,我正在进行PUT,并尝试重定向某个错误:

  rescue_from ActionController::InvalidAuthenticityToken do
    redirect_to new_user_session_url, status: 303 and return
  end

文档显示status:303应该将redirect_to作为GET调用,但它仍然是PUT。

如何将此重定向设为GET?

由于

3 个答案:

答案 0 :(得分:1)

如果您使用Ajax进行操作,您的请求将作为JS处理,那么您的重定向应该不起作用,因为您需要通过Ajax调用获得完整的响应。

最后,您应该在使用控制器发送URL的完整回调中进行重定向。

我希望能帮到你

答案 1 :(得分:1)

我可以在PUTbrowser

中进行curl重定向工作
# Gemfiile
gem 'rails'
gem 'pry'
gem 'puma'


# app.rb
require 'rails'
require 'action_controller'
require 'rack/handler/puma'

class InvalidAuthenticityToken < StandardError
end

# HelloController
class HelloController < ActionController::Base
  def index
    render inline: '
<form action="/" method="POST">
  <input type="hidden" name="_method" value="put" />
  First name:<br>
  <input type="text" name="firstname" value="Mickey">
  <br>
  Last name:<br>
  <input type="text" name="lastname" value="Mouse">
  <br><br>
  <input type="submit" value="Submit">
</form>
    '
  end

  def update
    raise InvalidAuthenticityToken
  end

  def redirect
    render plain: 'you are redirected'
  end

  rescue_from InvalidAuthenticityToken do
    redirect_to '/you_are_redirected'
  end
end

class MyApp < Rails::Application
end

app = MyApp.new
app.config.secret_key_base = 'my-secret'
app.initialize!
app.routes.draw do
  get '/' => 'hello#index'
  get '/you_are_redirected' => 'hello#redirect'
  put '/' => 'hello#update'
  put '/you_are_redirected' => 'hello#redirect'
  post '/you_are_redirected' => 'hello#redirect' # for browser request
end

Rack::Handler::Puma.run app

运行它

bundle
bundle exec ruby app.rb

访问localhost:9292

curl -X PUT localhost:9292 -L

you are redirected%

我希望它有所帮助

答案 2 :(得分:1)

您的请求不是http,因此状态不起作用。将您的重定向更改为以下内容:render :js => "window.location = '/users/signup'"或您的 new_user_session_path`网址。