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 2

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

Я думаю, это поможет