turbolinks / redirects после удаления
Имея ответ на удаление, обработанный через js, я перезагружаю страницу curent через 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" });
});
Наша ссылка для входа обрабатывается так.
Выход из системы затем перенаправляется на root_url.
Проблема в Турболинках.визит, по-видимому, сохраняет первоначальный метод:
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...
Это может быть просто вопрос синтаксиса / грамматики, которые я не смог обнаружить в исходном коде
Без обсуждения того факта, имеет ли такое поведение смысл или нет, является можно указать метод Турболин-ков.посетить для того, чтобы убедиться, что он эффективно проходит получить? (поскольку я просто использую его для перезагрузки текущей страницы, что бы ни случилось, это всегда будет GET)
1 ответ:
Это происходит, когда метод
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
Я думаю, это поможет