turbolinks / 删除后重定向
turbolinks / redirects after a delete
通过 js 处理删除响应,我正在通过 turbolinks 重新加载当前页面。换句话说:
// onclick setup encapsulates the following
axios({
method: "delete",
url: e.target.getAttribute("href"),
headers: Csrf() // passes the csrf token to keep things 'rails'
}).then(() => {
Turbolinks.visit(locationWithoutHash, { action: "replace" });
});
我们的注销link是这样处理的。
注销然后重定向到 root_url。
问题是,Turbolinks.visit 似乎保留了初始方法:
Started DELETE "/auth/sign_out" for 127.0.0.1 at 2018-04-22 11:21:12 +0200
Processing by Devise::SessionsController#destroy as HTML
...stuff
Redirected to http://demodemo.lvh.me:3000/
Completed 302 Found in 11ms (ActiveRecord: 1.9ms)
Started DELETE "/" for 127.0.0.1 at 2018-04-22 11:21:12 +0200
ActionController::RoutingError (No route matches [DELETE] "/"): etc...
可能只是 syntax/grammar 的问题,我无法在源代码中发现
在不讨论这种行为是否有意义的情况下,是否可以为 Turbolinks.visit 指定一种方法以确保它有效地通过 GET ? (因为我只是用它来重新加载当前页面,无论发生什么,它总是一个 GET)
当 destroy
方法在删除 redirect_to request.referer
或任何 URL 之后是这样的时候就会发生这种情况,如果你有这样的事情,然后改成这样
def destroy
@obj = Model.find(params[:id])
respond_to do |format|
if @obj.destroy
flash[:error] = 'Deleted'
format.html { redirect_to request.referer, status: 303 }
format.js { redirect_to request.referer, status: 303 }
end
end
end
我认为这会有所帮助
通过 js 处理删除响应,我正在通过 turbolinks 重新加载当前页面。换句话说:
// onclick setup encapsulates the following
axios({
method: "delete",
url: e.target.getAttribute("href"),
headers: Csrf() // passes the csrf token to keep things 'rails'
}).then(() => {
Turbolinks.visit(locationWithoutHash, { action: "replace" });
});
我们的注销link是这样处理的。
注销然后重定向到 root_url。
问题是,Turbolinks.visit 似乎保留了初始方法:
Started DELETE "/auth/sign_out" for 127.0.0.1 at 2018-04-22 11:21:12 +0200
Processing by Devise::SessionsController#destroy as HTML
...stuff
Redirected to http://demodemo.lvh.me:3000/
Completed 302 Found in 11ms (ActiveRecord: 1.9ms)
Started DELETE "/" for 127.0.0.1 at 2018-04-22 11:21:12 +0200
ActionController::RoutingError (No route matches [DELETE] "/"): etc...
可能只是 syntax/grammar 的问题,我无法在源代码中发现
在不讨论这种行为是否有意义的情况下,是否可以为 Turbolinks.visit 指定一种方法以确保它有效地通过 GET ? (因为我只是用它来重新加载当前页面,无论发生什么,它总是一个 GET)
当 destroy
方法在删除 redirect_to request.referer
或任何 URL 之后是这样的时候就会发生这种情况,如果你有这样的事情,然后改成这样
def destroy
@obj = Model.find(params[:id])
respond_to do |format|
if @obj.destroy
flash[:error] = 'Deleted'
format.html { redirect_to request.referer, status: 303 }
format.js { redirect_to request.referer, status: 303 }
end
end
end
我认为这会有所帮助