在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?
由于
答案 0 :(得分:1)
如果您使用Ajax进行操作,您的请求将作为JS处理,那么您的重定向应该不起作用,因为您需要通过Ajax调用获得完整的响应。
最后,您应该在使用控制器发送URL的完整回调中进行重定向。
我希望能帮到你
答案 1 :(得分:1)
我可以在PUT
和browser
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`网址。